将文本移动到UITableViewCell中的下一个文本文件

时间:2016-10-20 10:34:36

标签: ios objective-c uitableview uitextfield

我有一个UITableView并且有多个UITableViewCell

每个单元格都有一个UITextFiled

现在我正在向第1行文本文本中添加文字。现在我想在文本范围达到屏幕宽度时将文本移动到2行文本文件。

修改:

Textfiled委托方法

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    CGFloat textWidth = [textField.text sizeWithAttributes:@{NSFontAttributeName : textField.font}].width;
    CGFloat frameWidth = textField.frame.size.width - 11;

    if(textWidth > frameWidth) {

       //text reaches to screen width.
       [textField resignFirstResponder];

       MemoTableViewCell *nextCell = [_tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:(textField.tag+1) inSection:0]];
       [nextCell.noteTextField becomeFirstResponder];

      return NO;
  }

return YES;

}

Tableview方法:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 20;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     static NSString *simpleTableIdentifier = @"SimpleTableItem";

    MemoTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
          cell = [[MemoTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

    cell.noteTextField.delegate = self;
    cell.noteTextField.tag = indexPath.row;

    return cell;
}

现在我想在上面的方法返回NO时移动文本。

抱歉我的英语不好。我希望你理解我的问题,如果没有,请问我。

请帮帮我。

修改

上面的代码工作正常但有时会在下面的行崩溃

CGFloat textWidth = [textField.text sizeWithAttributes:@{NSFontAttributeName : textField.font}].width;
  

警告:无法加载任何Objective-C类信息。这将显着降低可用类型信息的质量。

3 个答案:

答案 0 :(得分:1)

以下是您可以应用以实现您的要求的高级逻辑。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

   CGSize size = [textField.text sizeWithAttributes:
@{NSFontAttributeName: [UIFont systemFontOfSize:textField.font]}];

   if (size.width > textField.frame.size.width) {

      //text reaches to screen width.
      [textfield resignFirstResponder];

       /*
          //Get next TextField and Make it first responder
          [cell.myTextField becomeFirstResponder]; 
       */
       /*
        Add code logic here
        1. Get the next cell instance - using cellForRowAtIndexPath
        2. Get its textfield instance - cell.myTextField
        3. Make that one as first responder - [cell.myTextField becomeFirstResponder]; 
        */
       return NO;
   }

   return YES;
}

这会将下一个单元格的文本字段设置为主要输入,它会将您的单元格跳转到该限制。

您可能需要相应地设置视图位置。

希望这有帮助。

答案 1 :(得分:1)

尝试以下代码,可能会有所帮助:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {


CGFloat textWidth = [textfield.text sizeWithAttributes:@{NSFontAttributeName : textfield.font}].width;
CGFloat frameWidth = textfield.frame.size.width;

    if(textWidth > frameWidth) {

       //text reaches to screen width.
       [textfield resignFirstResponder];

        /*
        //Get next TextField and Make it first responder
        [cell.YourNextTextField becomeFirstResponder]; 
        */

        return NO;
    }

    return YES;
}

答案 2 :(得分:0)

我认为您的tableView只有一个部分。用此替换shouldChangeCharactersInRange:中的代码。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

BOOL shouldChange = YES;

NSString *text = [textField.text stringByAppendingString:string];

CGFloat textWidth = [text sizeWithAttributes:@{NSFontAttributeName: textField.font}].width;

CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;

if (textWidth > screenWidth) {

    shouldChange = NO;

    NSInteger cellIndex = textField.tag;

    NSInteger numberOfRows = [self.tableView numberOfRowsInSection:0];

    if (cellIndex < numberOfRows - 1) {

        NSIndexPath *nextIndexPath = [NSIndexPath indexPathForRow:cellIndex+1 inSection:0];

        [self.tableView scrollToRowAtIndexPath:nextIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];

        TableViewCell *cell = [self.tableView cellForRowAtIndexPath:nextIndexPath];

        [cell.textField becomeFirstResponder];
    }
}

return shouldChange;
}

不要忘记在textField中设置cellForRowAtIndexPath:的标记,即cell.textField.tag = indexPath.row