2014-10-15 4 views
0

Мне нужно реализовать представление, которое требует от меня создания кнопок на основе ответа с сервера.Динамически создавать UIButton на основе ответа от сервера

Пример ответа:

{ 
    ... 
    "enable_button_1" = 1; 
    "enable_button_2" = 1; 
    "enable_button_3" = 1; 
    ... 
} 

В настоящее время я пытаюсь создать кнопки вручную с помощью Interface Builder. И каждый из них встроен в UIView и накладывается поверх друг друга. Например: Creating button one by one Они скрыты по умолчанию. Таким образом, всякий раз, когда включена или больше кнопок, я проверю с помощью условий if, а затем отобразите вид.

например. только одна кнопка включена

one button enabled

например. две кнопки включена

two button enabled

Но дело в том, поступая так, я бы, вероятно, пропустить несколько прецедентов, и это, кажется, как плохая практика. Есть ли способ создать его динамически вместо создания нескольких кнопок в UIViews в Interface Builder?

+0

Если вы хотите использовать Interface Builder вам нужно будет добавить кнопки, как вы теперь на экране, создать IBOutlet для ширины каждой кнопки, и установите ширину до 0,0, чтобы «скрыть» нужные кнопки. Если вы делаете свои ограничения правильно, все будет изменять размер для вас ... Говоря, что если вы хотите использовать цикл, чтобы сделать его более масштабируемым, тогда вам придется делать это в коде. Если у вас есть только 3 кнопки, как описано выше, то Interface Builder будет работать отлично, но я рекомендую создавать IBOulets для ширины кнопок вместо того, чтобы «скрывать» их, что намного мощнее. – DBoyer

+0

@DBoyer, прохладно. спасибо за предложение. Теперь он «скрыт», но он не изменяется. Я попытался установить ограничения, но все же. Почему установка ширины для скрытия кнопки лучше, чем использование setHidden? –

+0

Если вы установите горизонтальные ограничения между кнопками, изменение ширины приведет к тому, что соседняя кнопка заполнит оставшееся пространство. Если ширина равна 0.0, кнопка не будет отображаться на экране, поэтому ее «скрытый», а соседняя кнопка будет расширена, чтобы заполнить оставшееся пространство (это сила автоматического макета). – DBoyer

ответ

1

Вы всегда можете создавать кнопки программно и добавлять их в свой вид. Вам нужно будет рассчитать ширину кнопки-рамки, чтобы они всегда соответствовали просмотру на 100%.

Например как-то вроде этого:

//Here you'd have to calculate the correct position of the button you want to add 
    CGRect frame = CGRectMake(0, 0, self.buttonView.frame.size.width, self.buttonView.frame.size.height); 
    UIButton *button = [[UIButton alloc] initWithFrame:frame]; 
    [button setTitle:@"myButton" forState:UIControlStateNormal]; 
    [self.buttonView addSubview:button]; 
+0

Он использует интерфейс Builder, который использует ограничения макета, установка рамки невозможна, какие элементы создают через раскадровку. Вы можете изменять только ограничения. – DBoyer

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