2014-08-27 6 views
1

Я знаю, что есть лучший способ сделать это, чем моя нообская реализация. Я пытаюсь добавить 4 кнопки в представление с 4 различными CGrects, чтобы кнопки стекали один поверх другого. Теперь отлично код работает, но я изо всех сил, чтобы превратить этот повторяющийся код в рабочий метод:Создать несколько кнопок без дублирующего кода?

CGRect rect = CGRectMake(30.0f, 250.0f, 250.0f, 250.0f); 
CGRect rect1 = CGRectMake(30.0f, 275.0f, 250.0f, 250.0f); 
CGRect rect2 = CGRectMake(30.0f, 300.0f, 250.0f, 250.0f); 
CGRect rect3 = CGRectMake(30.0f, 325.0f, 250.0f, 250.0f); 

enableAlarm = [[UIButton alloc] initWithFrame:rect]; 
[enableAlarm setTitle:firstTime forState:UIControlStateNormal]; 
[enableAlarm setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
[[self view] addSubview:enableAlarm]; 

enableAlarm1 = [[UIButton alloc] initWithFrame:rect1]; 
[enableAlarm1 setTitle:secondTime forState:UIControlStateNormal]; 
[enableAlarm1 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
[[self view] addSubview:enableAlarm1]; 

enableAlarm2 = [[UIButton alloc] initWithFrame:rect2]; 
[enableAlarm2 setTitle:thirdTime forState:UIControlStateNormal]; 
[enableAlarm2 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
[[self view] addSubview:enableAlarm2]; 

enableAlarm3 = [[UIButton alloc] initWithFrame:rect3]; 
[enableAlarm3 setTitle:fourthTime forState:UIControlStateNormal]; 
[enableAlarm3 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
[[self view] addSubview:enableAlarm3]; 

Я чувствую, как это можно поставить в один простой метод, который я могу назвать четыре раза, но не могу понять как сделать это ...

+0

Если вы только начинаете с программирования, поиск хорошей книги или серии онлайн-руководств, вероятно, послужит вам лучше, чем вопросы о переполнении стека. Взгляните на [Хорошие ресурсы для обучения ObjC] (http://stackoverflow.com/q/1374660). Книги Big Nerd Ranch превосходны, и многие люди любят курс Stanford iOS на iTunes U. Удачи! –

ответ

4

каждый раз, когда вы повторяете что-то, попробуйте цикл

CGRect rects = { {30.0f, 250.0f, 250.0f, 250.0f}, 
       {30.0f, 275.0f, 250.0f, 250.0f}, 
       {30.0f, 300.0f, 250.0f, 250.0f}, 
       {30.0f, 325.0f, 250.0f, 250.0f}, 
       }; 
NSString *titles = @[firstTime, secondTime, thirdTime, fourthTime]; 

NSMutableArray *enableAlarmButtons = [NSMutableArray array]; // if you want to access these buttons later 
for (int i = 0; i < 4; ++i) { // you can use sizeof to avoid hardcode number 
    UIButton *enableAlarm = [[UIButton alloc] initWithFrame:rects[i]]; 
    [enableAlarm setTitle:titles[i] forState:UIControlStateNormal]; 
    [enableAlarm setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
    [[self view] addSubview:enableAlarm]; 
    [enableAlarmButtons addObject:enableAlarm]; 
} 

если только у значение изменяется

CGRect rect = CGRectMake(30.0f, 250.0f, 250.0f, 250.0f); 
NSString *titles = @[firstTime, secondTime, thirdTime, fourthTime]; 

NSMutableArray *enableAlarmButtons = [NSMutableArray array]; // if you want to access these buttons later 
for (int i = 0; i < 4; ++i) { 
    UIButton *enableAlarm = [[UIButton alloc] initWithFrame:rects[i]]; 
    [enableAlarm setTitle:titles[i] forState:UIControlStateNormal]; 
    [enableAlarm setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
    [[self view] addSubview:enableAlarm]; 
    [enableAlarmButtons addObject:enableAlarm]; 

    rect.origin.y += 25; 
} 
+0

Ударь мне. Обратите внимание, что заголовок также изменяется ('firstTime',' secondTime' и т. Д.); вам понадобится массив или что-то еще для них. –

+0

Кроме того, поскольку значение y является единственным изменением - и постоянно изменяется - между прямоугольниками, вы можете упростить это, просто делая добавление на каждой итерации. –

+0

@JoshCaswell спасибо за это. обновлено. –

Смежные вопросы