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

使用模态对话框时,iPhone-UITextField是否未以编程方式设置为可编辑?,iphone,objective-c,uiviewcontroller,uitextview,Iphone,Objective C,Uiviewcontroller,Uitextview,我是iPhone开发的新手,在一件显然非常简单的事情上遇到了一些麻烦 - (IBAction) addButtonPressed:(id) sender { AddDrinkViewController *addDrinkVC = [[AddDrinkViewController alloc] initWithNibName:@"DrinkDetailView" bundle:nil]; UINavigationController *addNavCon = [[UINavigati

我是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

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

我知道这似乎是一件很简单的事情,但我一直在网上寻找,一直没有找到答案。。。也许我遗漏了一些关于模态视图行为的基本信息

提前非常感谢。

两件事:

假设文本视图是使用Interface Builder添加到视图控制器的,则可能是您忘记在代码中将IB中的视图连接到IBOutlet

要测试这一点,您可以添加一个快速断言:

NSAssert(addDrinkVC.ingredientsTextView,@"ingredientsTextView in AddDrinkViewController is nil. Did I forget to wire it?")
addDrinkVC.ingredientsTextView.editable = YES;
如果断言失败,您的程序将崩溃,您将在控制台上看到该消息

其次,我将把设置可编辑属性的逻辑移到视图控制器本身(在您的例子中是AddDrinkViewController类)

-或-


你的问题很简单

设置属性时,此时未加载nib,且所有插座均处于冻结状态,因此属性不会设置为文本视图。因此,您只需将这部分代码放在AddDrinkViewController类的viewDidLoad方法中

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

好答案!!!试着使用布拉德·史密斯(brad smith)所说的断言:)这确实是一个好习惯。
-(void) viewDidLoad {
    NSAssert(addDrinkVC.ingredientsTextView,@"ingredientsTextView in AddDrinkViewController is nil. Did I forget to wire it?")
    addDrinkVC.ingredientsTextView.editable = YES;
}
-(void) viewDidLoad 
{
    [super viewDidLoad];
    addDrinkVC.ingredientsTextView.editable = YES;
}