2010-03-04 2 views
2

Я добрая новость с развитием iPhone, и у меня проблемы с по-видимому очень простой штукой.iPhone - UITextField не доступен для редактирования при использовании модального диалога?

- (IBAction) addButtonPressed:(id) sender { 

AddDrinkViewController *addDrinkVC = [[AddDrinkViewController alloc] initWithNibName:@"DrinkDetailView" bundle:nil]; 
UINavigationController *addNavCon = [[UINavigationController alloc] initWithRootViewController:addDrinkVC]; 

//the textview is not becoming editable here, even thou i'm setting the property to true. 
addDrinkVC.ingredientsTextView.editable = YES; 

[self presentModalViewController:addNavCon animated:YES]; 

[addDrinkVC release]; 
[addNavCon release]; 
} 

В принципе, кнопка [+] используется на навигационном контроллере, и появляется модальное представление.

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

Я пытаюсь редактировать текстовые поля и текстовые поля, когда [+] прослушивается, но до сих пор мне не повезло.

Я знаю, что это похоже на ОЧЕНЬ простую вещь, но я искал онлайн и не смог найти ответ ... возможно, мне не хватает чего-то очень элементарного в поведении модальных просмотров ?

Большое спасибо.

ответ

3

Две вещи:

Если предположить, что в Text View был добавлен в View Controller с помощью Interface Builder, то возможно, что вы забыли телеграфировать Просмотреть в IB к IBOutlet в вашем коде.

Чтобы проверить это можно быстро добавить утверждение:

NSAssert(addDrinkVC.ingredientsTextView,@"ingredientsTextView in AddDrinkViewController is nil. Did I forget to wire it?") 
addDrinkVC.ingredientsTextView.editable = YES; 

Если утверждение не удается, программа зависнет, и вы увидите, что сообщение на консоли.

Во-вторых, я хотел бы переместить логику, которая устанавливает редактируемое свойство в самом контроллере вида (в вашем случае класс AddDrinkViewController)

 -(void) viewWillAppear:(BOOL) animated { 
      [super viewWillAppear:animated]; 
      NSAssert(addDrinkVC.ingredientsTextView,@"ingredientsTextView in AddDrinkViewController is nil. Did I forget to wire it?") 
      addDrinkVC.ingredientsTextView.editable = YES; 
} 

-или-

-(void) viewDidLoad { 
    NSAssert(addDrinkVC.ingredientsTextView,@"ingredientsTextView in AddDrinkViewController is nil. Did I forget to wire it?") 
    addDrinkVC.ingredientsTextView.editable = YES; 
} 
+0

Хороший ответ !!! Попытайтесь использовать утверждения, как сказал Брэд Смит: Это действительно хорошая привычка. – Manjunath

1

Ваша задача проста один.

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

-(void) viewDidLoad 
{ 
    [super viewDidLoad]; 
    addDrinkVC.ingredientsTextView.editable = YES; 
} 
Смежные вопросы