我有两个视图 - 一个是我的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保持可编辑状态 - 当我点击它们时会出现键盘。我在这里缺少什么?
答案 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
属性。将其设置为YES
或NO
,然后在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
{
}