Domanda

Ho una visione nella mia app, che ha una serie di pulsanti in base al numero di elementi restituiti dal server. Quindi, se il server restituisce dicono 10 articoli, ci dovrebbe essere 10 pulsanti e cliccando su ogni pulsante dovrebbe chiamare una persona diversa.

Ai fini di cui sopra ho creato una classe pulsante personalizzato derivanti da UIButton.

@implementation HopitalButton

@synthesize index;
@synthesize button_type;

- (id)initWithFrame:(CGRect)frame {

    if (self = [super initWithFrame:frame]) {
        UIImage* img = [UIImage imageNamed:@"dr_btn.png"];
        [img stretchableImageWithLeftCapWidth:10 topCapHeight:10];
        [self setBackgroundImage:img forState:UIControlStateNormal];
        [self setTitleColor:[UIColor colorWithRed:0.698 green:0.118 blue:0.376 alpha:1] forState:UIControlStateNormal] ;
        [self setFont:[UIFont fontWithName:@"Helvetica Bold" size:13]];
        self.titleLabel.textColor = [UIColor colorWithRed:178 green:48 blue:95 alpha:1];
        self.adjustsImageWhenHighlighted = YES;
    }
    return self;
}

- (void)dealloc {
    [super dealloc];
}


@end

Ora il problema con il codice di cui sopra è che non crea pulsanti che sembrano simili ai pulsanti creati per impostazione predefinita in Interface Builder. I confini sono mancanti.

E creo pulsanti del tipo sopra dal seguente codice:

    HopitalButton* hb = [[HopitalButton alloc] init];
    hb.button_type = @"call";
    hb.frame = CGRectMake(50, 50 + i * 67, 220, 40);
    [self.scroll_view addSubview:hb];
    [hb setTitle:[[[self.office_full_list objectAtIndex:i] objectForKey:@"Staff" ]objectForKey:@"FullName"] forState:UIControlStateNormal];
    hb.index = [NSNumber numberWithInt:[self.button_items count]];
    [self.button_items insertObject:hb atIndex:[self.button_items count]];
    [hb addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];

Io non sto trovando un modo per impostare il tipo di pulsante per questo pulsante personalizzato. C'è un modo posso farlo? O c'è un modo migliore per progettare il codice.

È stato utile?

Soluzione

si inizia con un'immagine estensibile con un bordo:

alt text http://grab.by/4lP

Poi fate un pulsante con l'immagine allungata come sfondo e applicare testo.

INDEX_OFFSET = 82753; // random

UIButton *sampleButton = [UIButton buttonWithType:UIButtonTypeCustom];
[sampleButton setFrame:CGRectMake(kLeftMargin, 10, self.view.bounds.size.width - kLeftMargin - kRightMargin, 52)];
[sampleButton setTitle:@"Button Title" forState:UIControlStateNormal];
[sampleButton setFont:[UIFont boldSystemFontOfSize:20]];
[sampleButton setTag:<INDEX>+INDEX_OFFSET];
[sampleButton setBackgroundImage:[[UIImage imageNamed:@"redButton.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0] forState:UIControlStateNormal];
[sampleButton addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:sampleButton];

Ovviamente, è necessario regolare l'origine telaio e le dimensioni per soddisfare la vostra applicazione, così come l'obiettivo, selettore, e il titolo. E

Altri suggerimenti

[sampleButton setFont:[UIFont boldSystemFontOfSize:20]]; 

setFont è ormai deprecato, utilizzare la proprietà titleLabel.font invece

sampleButton.titleLabel.font = [UIFont boldSystemFontOfSize:20];

è possibile utilizzare la classe individuale per pulsante personalizzato RoundRect che può essere utile a tutto il progetto con il vostro specifico stile di cornice, come di seguito

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
@interface CustomRoundRectButton : UIButton
@end


#import "CustomRoundRectButton.h"
@implementation CustomRoundRectButton
- (void)drawRect:(CGRect)rect
{
[[self layer] setMasksToBounds:YES];
[self.layer setCornerRadius:10.0f]; 
[self.layer setBorderColor:[UIColor grayColor].CGColor]; 
[self.layer setBorderWidth:1.0];
}
@end

In questo è necessario selezionare il tipo di pulsante personalizzato e selezionare il suo classe come CustomRoundRectButton.

For Simple custom button we can use as below

-(UIBarButtonItem*)BackButton
{
UIButton*btn =  [UIButton buttonWithType:UIButtonTypeCustom];
[btn setImage:[UIImage imageNamed:@"back.png"] forState:UIControlStateNormal];
[btn setFrame:CGRectMake(0, 0, 30, 30)];
[btn addTarget:self action:@selector(actionBack) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem*barBtn = [[[UIBarButtonItem alloc] initWithCustomView:btn] autorelease];
return barBtn;
}

Non dovresti essere chiamata initWithFrame: rect invece di:

    HopitalButton* hb = [[HopitalButton alloc] init];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top