2009-10-20 2 views
0

У меня есть это приложение, над которым я работаю, который на втором представлении запрашивает (текстовое поле) имя кнопки, которая будет создана при первом представлении. После указания имени и нажатия кнопки «ОК» открывается первое представление (как того требовалось), но нет новой кнопки, хотя и создана. Могу ли я использовать следующий код во втором методе представления, чтобы «обновить» первое представление перед представлением себя. Что случилось с этим кодом? Любой другой подход? Спасибо.Создание кнопки на вид со второго представления

-(void)initWithView:(View1Controller *)aSuperview 
{ 
    theSuperview = aSuperview; 
} 

- (IBAction)itemNameButton 
{ 
    ... 
    CGRect rectang; 
    rectang = CGRectMake(0, 0, 320, 460);// just in case 
    [theSuperview.view setNeedsDisplayInRect:rectang]; 
    ... 
} 
+0

Сообщите, где вы действительно создали свою кнопку и добавьте ее в представление. Код, который вы опубликовали, не имеет отношения к проблеме, которую вы описываете. – Vladimir

+0

Владимир, я опубликовал более подробный код. – BigJoke

+0

Пожалуйста, не смешивайте представления и контроллеры просмотра. Это две разные концепции. – kennytm

ответ

0

Вы должны придерживаться парадигмы Model-View-Controller. Представления, создающие кнопки в других представлениях, - это вообще плохо. Вместо этого должен быть контроллер (возможно, подкласс UIViewController), который обрабатывает прием ввода из представления 2, когда пользователь нажимает OK (через действие и выход в текстовое поле), а затем сообщает view 1 (пользовательский вид подкласса), что используйте определенный набор методов (например, -addButtonWithTitle: (NSString *) buttonTitle). Процесс добавления самой кнопки должен быть довольно прост, например:

- (void)addButtonWithTitle:(NSString *)buttonTitle { 
    UIButton *newButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // whatever type you want 

    newButton.titleLabel.text = buttonTitle; 

    [self addSubview:newButton]; 
    newButton.center = self.center; // set your position here 
} 
+0

Бен, пожалуйста, оформить мой пост. – BigJoke

0

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

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

Для приятного и простого ознакомления с делегатами и протоколами я нашел this blog post, чтобы быть одним из лучших там.

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