iPhone - UITextField не установлен для редактирования программно при использовании модального диалога? - PullRequest
2 голосов
/ 04 марта 2010

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

   - (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];
}

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

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

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

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

Заранее большое спасибо.

Ответы [ 2 ]

3 голосов
/ 04 марта 2010

Две вещи:

Предполагая, что текстовое представление было добавлено в 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;
}
1 голос
/ 04 марта 2010

Ваша проблема проста.

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

-(void) viewDidLoad 
{
    [super viewDidLoad];
    addDrinkVC.ingredientsTextView.editable = YES;
}
...