2017-12-30 49 views
0

Ich habe ein Problem in meiner Objective-C-iOS-App, wo ich je nach Anzahl der Objekte in einem Array mehrere Schaltflächen erzeuge. Ich kenne Swift fließend, also habe ich die Logik in Swift nachgebildet, und es hat funktioniert. In Objective C kann ich jedoch den Text der Schaltfläche nicht sehen (nachdem ich die for-Schleife entfernt habe) oder mehrere Schaltflächen erstellen. Zum Beispiel habe ich ein Array voller drei Namen. Ich möchte für jeden Namen eine Schaltfläche mit dem Titel auf den entsprechenden Namen erstellen. Bisher habe ich folgendes:UIButton setzt keinen Text

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 


NSMutableArray *ages = [[NSMutableArray alloc] init]; 

for (int i = 0; i > 10; i++) { 
    [ages addObject:[NSString stringWithFormat:@"%i", i]]; 
} 


UIScrollView *scrollView= [[UIScrollView alloc]initWithFrame:self.view.frame]; 
scrollView.delegate= self; 
self.automaticallyAdjustsScrollViewInsets= NO; 
scrollView.backgroundColor= [UIColor clearColor]; 
scrollView.scrollEnabled= YES; 
scrollView.userInteractionEnabled= YES; 
[scrollView setShowsHorizontalScrollIndicator:NO]; 
[scrollView setShowsVerticalScrollIndicator:NO]; 


CGFloat xValue = 0; 
for(int x=0; x > ages.count; x++){ 
    UIButton *button= [[UIButton alloc] initWithFrame:CGRectMake(xValue ,0 , 172 ,65)]; 
    UIColor *buttonOutline = [[UIColor redColor] CGColor]; 
    button.layer.borderColor = [buttonOutline CGColor]; 
    button.layer.backgroundColor = [[UIColor clearColor] CGColor]; 
    button.layer.borderWidth = 1.0; 
    button.layer.cornerRadius = 6.0; 
    [button.titleLabel setFont:[UIFont fontWithName:@"Helvetica" size:13.0]]; 
    button.titleLabel.text = [ages objectAtIndex:x]; 
    [button addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside]; 
    [scrollView addSubview:button]; 
    NSLog(@"Button Added"); 
    xValue = button.frame.size.width + 40; 

} 

scrollView.contentSize = CGSizeMake(xValue, 65); 
[self.view addSubview:scrollView]; 

} 

- (void)test:(UIButton*)sender{ 
    NSLog(@"Clicked %@", sender.titleLabel.text); 
} 



@end 

Wenn jemand etwas falsch mit diesem Code sieht, bitte weisen Sie darauf hin!

Danke,

Arnav K.

+1

[Schaltfläche setTitle: [Alter objectAtIndex: x]]; –

+0

Sie müssen kein 'forControlEvents:' hinzufügen? –

Antwort

1

fand ich vier Probleme (es können andere sein), dass diese Arbeit richtig zu stoppen:

1) Die gebundene for-Schleife, wenn das Alter Array ist das Einrichten falsch. 2) Die for-Schleife gebunden beim Erstellen der Schaltflächen ist falsch. 3) Sie setzen die buttonOutline Farbe falsch. 4) xValue wird nicht korrekt aktualisiert.

Hier ist das viewDidLoad Verfahren, nachdem die Änderungen vorgenommen wurden:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSMutableArray *ages = [[NSMutableArray alloc] init]; 

    for (int i = 0; i < 10; i++) { // UPDATED 
     [ages addObject:[NSString stringWithFormat:@"%i", i]]; 
    } 


    UIScrollView *scrollView= [[UIScrollView alloc]initWithFrame:self.view.frame]; 
    scrollView.delegate= self; 
    self.automaticallyAdjustsScrollViewInsets= NO; 
    scrollView.backgroundColor= [UIColor clearColor]; 
    scrollView.scrollEnabled= YES; 
    scrollView.userInteractionEnabled= YES; 
    [scrollView setShowsHorizontalScrollIndicator:NO]; 
    [scrollView setShowsVerticalScrollIndicator:NO]; 


    CGFloat xValue = 0; 
    for(int x=0; x < ages.count; x++){ // UPDATED 
     UIButton *button= [[UIButton alloc] initWithFrame:CGRectMake(xValue ,0 , 172 ,65)]; 
     UIColor *buttonOutline = [UIColor redColor]; // UPDATED 
     button.layer.borderColor = [buttonOutline CGColor]; 
     button.layer.backgroundColor = [[UIColor clearColor] CGColor]; 
     button.layer.borderWidth = 1.0; 
     button.layer.cornerRadius = 6.0; 
     [button.titleLabel setFont:[UIFont fontWithName:@"Helvetica" size:13.0]]; 
     button.titleLabel.text = [ages objectAtIndex:x]; 
     [button addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside]; 
     [scrollView addSubview:button]; 
     NSLog(@"Button Added"); 
     xValue += button.frame.size.width + 40; // UPDATED 

    } 

    scrollView.contentSize = CGSizeMake(xValue, 65); 
    [self.view addSubview:scrollView]; 
} 

Ich habe die vier Linien markiert ich mit einem AKTUALISIERT Kommentar geändert, damit Sie sie mit dem Original vergleichen können.

EDIT , um die Farbe von Text und Text zu ändern verwenden Sie die folgenden Schritte aus:

[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; 
[button setTitle:[ages objectAtIndex:x] forState:UIControlStateNormal]; 

und entfernen diese:

button.titleLabel.text = [ages objectAtIndex:x]; 

Sie müssen dies tun, weil Sie einen anderen Text für die festlegen verschiedene Zustände der Schaltfläche und dies wird automatisch für Sie erledigt.

+0

Ich habe versucht, das auszuführen, aber die Titel werden nicht gesetzt. Ich habe sogar eine Schriftfarbe hinzugefügt, aber der Text erscheint nicht. Der Code für die Titelfarbe war '[button setTitleColor: buttonOutline forState: UIControlStateSelected];'. Weißt du, warum das passiert? –

+0

Tut mir leid, '[button setTitleColor: buttonOutline forState: UIControlStateNormal];' –

+1

Entschuldigung, ich habe alles andere funktioniert und habe das ursprüngliche Problem vergessen. Ich werde die Antwort bearbeiten. –

Verwandte Themen