2014-01-15 44 views
0

我想在点击UITextView时显示UITableView。不应显示 键盘。 问题是在窃听UITextViewUITableView和键盘都显示。 我只想要显示表格视图。我想要显示UITextView中的网络服务获得的数据,这是不可编辑的。按下导航栏中的编辑按钮,点击UITextView时,应弹出UITableView而不是键盘。在点击UITextField时显示UITableView

我的代码如下:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{ 

if([text isEqualToString:@"\n"]) { 
    [textView resignFirstResponder]; 
    return NO; 
} 

return YES; 
} 

-(void)textViewDidBeginEditing:(UITextView *)textView{ 


[self.view endEditing:YES]; 

tableVw=[[UITableView alloc]initWithFrame:CGRectMake(0, 0, 320, 500)]; 
tableVw.dataSource=self; 
tableVw.delegate=self; 


[self.view addSubview:tableVw]; 

} 
-(void)viewDidLoad{ 

[super viewDidLoad]; 

txtVwDescription=[[UITextView alloc]initWithFrame:CGRectMake(10, 270, 300,stringSize.height+10)]; 
txtVwDescription.backgroundColor=[UIColor clearColor]; 
txtVwDescription.layer.cornerRadius=5; 
txtVwDescription.backgroundColor=[UIColor colorWithRed:0.662745 green:0.662745 blue:0.662745 alpha:0.3]; 

[txtVwDescription setFont:[UIFont systemFontOfSize:13.0]]; 
txtVwDescription.contentInset=UIEdgeInsetsMake(0, 0, 0, 0); 
[txtVwDescription setUserInteractionEnabled:NO]; 
txtVwDescription.editable=NO; 
txtVwDescription.delegate=self; 
[self.view addSubview:txtVwDescription]; 
} 

-(void)edit{ 
[txtVwDescription setUserInteractionEnabled:YES]; 
txtVwDescription.editable=NO; 
[txtVwDescription resignFirstResponder]; 
} 

回答

5

可以使用UITextViewDelegate的textViewShouldBeginEditing方法返回NO,并呈现在那里的UITableView。这样的键盘不应该出现。

0

而不是必须与textViewDelegate方法一塌糊涂,我发现很容易简单地为TextView的禁用编辑和添加一个手势识别它是这样的:

UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showTableView)]; 

    UITextView *textView = [[UITextView alloc] initWithFrame:....]; 
    textView.editable = NO; 
    [textView addGestureRecognizer:tapGestureRecognizer]; 

这样,没有键盘显示你不必在代理方法中弄乱导航。所有你现在需要做的是处理与方法水龙头您提供的识别:

- (void)showTableView { 
    // do stuff here 
} 

编辑:

你可能想,如果你是不是也可以考虑使用一个UILabel,而不是一个UITextView的计划让它可编辑。您也可以实现相同的手势识别器代码,只需将其添加到标签而不是textView。

+0

tableview是不是在这种方法 – user2552751

+0

你在showTableView中使用什么代码? – Mike

0

UITextFieldUITextView类具有名为inputView的属性,用于显示自定义视图而不是默认键盘。当文本框/视图成为第一响应者时,系统会显示您设置为该属性的任何UIView后代类。因此,简单地添加,

UITextView *textView = [[UITextView alloc] initWithFrame:someFrame]; 
textView.inputView = self.myTableView; //this is your already initialised tableview