我们可以对UITextView采取哪些addTarget操作?

时间:2012-04-11 09:49:45

标签: iphone objective-c ios uitextview

我想在UITextView上使用addTarget:action,例如on(UITextField或UIButton)。

我想在UITextView上调用一个方法。

请给出一些可能的解决方案......

谢谢......

UITextView  *TXT_First_Tag = [[UITextView alloc] initWithFrame:CGRectMake(5, textPosY, 350, 65)];
TXT_First_Tag.backgroundColor = [UIColor whiteColor];
TXT_First_Tag.font = [UIFont fontWithName:@"Arial-BoldMT" size:30.0];
TXT_First_Tag.editable =YES;
TXT_First_Tag.tag = i; 
TXT_First_Tag.textColor = [UIColor blackColor];


[TXT_First_Tag addTarget:self action:@selector(C6Loop) forControlEvents:UIControlEventEditingDidEnd]; //  This Line I want to use, it's working fine on textfield...
[scrollview addSubview:TXT_First_Tag];

4 个答案:

答案 0 :(得分:11)

我们为此目的使用UITextView委托方法。

将其放入您的代码中。

UITextView  *TXT_First_Tag = [[UITextView alloc] initWithFrame:CGRectMake(5, textPosY, 350, 65)];
TXT_First_Tag.backgroundColor = [UIColor whiteColor];
TXT_First_Tag.font = [UIFont fontWithName:@"Arial-BoldMT" size:30.0];
TXT_First_Tag.editable =YES;
TXT_First_Tag.delegate  =   self;
TXT_First_Tag.tag = i; 
TXT_First_Tag.textColor = [UIColor blackColor];
[scrollview addSubview:TXT_First_Tag];

- (void)textViewDidBeginEditing:(UITextView *)textView{
    NSLog(@"Begin editing");
}

- (void)textViewDidEndEditing:(UITextView *)textView{
    NSLog(@"DidEndEditing");
}

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView{
    NSLog(@"ShouldBeginEditing");
    return TRUE;
}

- (BOOL)textViewShouldEndEditing:(UITextView *)textView{
    NSLog(@"ShouldEndEditing");
    return TRUE;
}

答案 1 :(得分:3)

如果你的控制器实现了UITextViewDelegate协议,你可以在控制器的实例方法viewDidLoad()中将控制器设置为文本视图的委托:

yourTextView.delegate = self;

然后,如果您想在编辑文字视图之前执行任务,请使用:

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

并且,如果您想在编辑文字视图后执行任务,请使用:

-(void)textViewDidEndEditing:(UITextView *)textView {}

答案 2 :(得分:0)

当然,通过实施UITextViewDelegate来获得“编辑结束”消息的更好方法是什么?

TXT_First_Tag.delegate = self;

... 

- (void)textViewDidEndEditing:(UITextView *)textView {
  // stuff you'd put in C6Loop

答案 3 :(得分:0)

CHAPS, 尽管你的回答没有直接解决我的问题,但它帮助我缩小了范围。

我在每个单元格中都有文本视图,需要传递正在编辑的文本视图,以便我可以更新数据库。

简而言之,我将每个单元格中的每个textview标记都设置为indexpath.row。然后我通过textview.tag

在委托中引用该单元格
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {  


    static NSString *MyIdentifier = @"MyIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil)
    {
    [[NSBundle mainBundle] loadNibNamed:@"frontCell" owner:self options:nil];
    cell = mainPageCell;
    self.mainPageCell = nil;
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }    


    UITextView *trackDetails;
    trackDetails = (UITextView *)[cell viewWithTag:22];
    trackDetails.text = [[myArray objectAtIndex:indexPath.row] objectAtIndex:0];
    trackDetails.delegate = self;
    trackDetails.tag = indexPath.row;


    }

    - (void)textViewDidEndEditing:(UITextView *)textView
    {
    NSLog(@"%d",textView.tag);
    UPDATE DATABASE WITH CHANGED TEXT
    [textView resignFirstResponder];
    [self.tableView reloadData];
    }