iPhone - 使用模态对话框时,UITextField无法以编程方式设置为可编辑?

时间:2010-03-04 03:51:39

标签: iphone objective-c uiviewcontroller uitextview

我对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];
}

基本上,在导航控制器上点击[+]按钮,会出现模态视图。

显示的视图是从另一个视图扩展而来的,该视图最初从nib本身禁用了textfields和textview。

我试图在点击[+]时使textviews和textfields可编辑,但到目前为止,我没有运气。

我知道这似乎是一件非常简单的事情,但我一直在网上寻找并且找不到答案......也许我对模态视图的行为缺少一些非常基本的东西?

提前多多感谢。

2 个答案:

答案 0 :(得分:3)

两件事:

假设使用Interface Builder将文本视图添加到View Controller,您可能忘记将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;
}

-OR -

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

答案 1 :(得分:1)

你的问题很简单。

当您设置属性时,未加载该时间笔尖且所有出口处于冻结状态,因此该属性不会设置为文本视图。因此,您只需将该部分代码放在 AddDrinkViewController 类的viewDidLoad方法中。

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