iPhone:如何在切换视图时制作UITextField,UITextView无法使用

时间:2011-06-30 22:09:16

标签: iphone ios4 uitextfield uitextview

我有两个视图 - 一个是我的iphone应用程序中的表视图和另一个详细视图。选择表格中的行时,将显示详细信息视图。

我正在使用nib进行详细视图来编辑记录,添加新记录以及显示记录。详细视图有一个UITextField和一个UITextView,当我只显示记录时需要将其编辑为无法编辑。在tableview的didSelectRowAtIndexPath方法中,我尝试了这个......

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.
    MemoDetailViewController *memoDetailViewController = [[MemoDetailViewController alloc] initWithNibName:@"MemoDetailViewController" bundle:nil];

    memoDetailViewController.memo = [self.resultsController objectAtIndexPath:indexPath];

// making the text field and text view uneditable - DID NOT WORK???
        memoDetailViewController.memoTitleText.enabled = NO;
        memoDetailViewController.memoTextView.editable = NO;

    // Pass the selected object to the new view controller.
    [self.navigationController pushViewController:memoDetailViewController animated:YES];
    [memoDetailViewController release];
}

这不起作用。 textfield和uitextview保持可编辑状态 - 当我点击它们时会出现键盘。我在这里缺少什么?

6 个答案:

答案 0 :(得分:7)

可能最简单的方法是使用各自的委托方法。它们是相同的,只有不同的名称。以UITextField为例,您将采用基本方法

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    if (someCaseWhereYouWantToEdit) {
        return YES;
    } else {
        return NO;
    }
}

这使您可以指定何时继续编辑。您当然需要将textField和textView实例设置为self作为其委托,并在标题中导入委托协议

答案 1 :(得分:4)

您甚至可以禁用特定UI元素的XIB中的用户交互功能

答案 2 :(得分:1)

代码无效,因为视图尚未从XIB加载,因此这些属性为nil,而对nil的消息传递则无效。如果您先将订单更改为pushViewController,那么它应该可以正常工作

MemoDetailViewController *memoDetailViewController = [[MemoDetailViewController alloc] initWithNibName:@"MemoDetailViewController" bundle:nil];

memoDetailViewController.memo = [self.resultsController objectAtIndexPath:indexPath];

[self.navigationController pushViewController:memoDetailViewController animated:YES];

memoDetailViewController.memoTitleText.enabled = NO;
memoDetailViewController.memoTextView.editable = NO;

[memoDetailViewController release];

虽然这有效,但我建议声明BOOL属性。将其设置为YESNO,然后在viewWillAppear:方法中使用其值来启用或禁用字段。

答案 3 :(得分:0)

在视图控制器中尝试这个应该是不可编辑的视图:

-(void)viewWillAppear:(BOOL)animated {
     memoDetailViewController.memoTextView.editable = NO;
}

-(void)viewWillDisappear:(BOOL)animated {
    memoDetailViewController.memoTextView.editable = YES;
}

答案 4 :(得分:0)

你也可以在两个视图控制器中同时使用它

 -(void)viewDidAppear:(BOOL)animated 
 {
   memoDetailViewController.memoTextView.editable = NO;
 }

 -(void)viewDidDisappear:(BOOL)animated 
 {
   memoDetailViewController.memoTextView.editable = YES;
 }

答案 5 :(得分:0)

你应该试试这个:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{

}