添加元素时,UITableView会调整大小

时间:2013-04-22 21:11:49

标签: iphone ios uitableview storyboard

我正在使用iPhone的IRC客户端,我的UITableView出现了问题。

首先,我调整了tableview的大小,以便在用户键入消息时,工具栏和键盘将适合屏幕。看起来像这样:

User typing mode

但问题是,当用户完成输入并想要发送消息(发送到流并添加到tableview)时,将调整tableview的大小并将工具栏放在底部,但键盘保留,我不哪个文本字段要辞职第一响应者,我想保持键盘和工具栏在按下发送按钮之前和之后的位置。看起来像这样:

Fail mode

这是我的一些代码:

- 重建窗口

// Keyboard will show
- (void)keyboardWillShow {
    [UIView animateWithDuration:0.25 animations:^{
        [self.tableView setFrame:CGRectMake(0, 0, 320, 177)];
    }];

    [UIView animateWithDuration:0.25 animations:^{
        [self.toolBar setFrame:CGRectMake(0, 177, 320, 43)];
    }];    
}

// Keyboard will hide
- (void)keyboardWillHide {
    [UIView animateWithDuration:0.25 animations:^{
        [self.tableView setFrame:CGRectMake(0, 0, 320, 481)];
    }];

    [UIView animateWithDuration:0.25 animations:^{
        [self.toolBar setFrame:CGRectMake(0, 393, 320, 43)];
    }];    
}

- 将元素添加到tableview

// Retrieve the sender and the message from the input and add it to the data context
- (void)addMessage:(NSString *) input isSender: (BOOL) sender {
    Message *messageToBeAdded = [[Message alloc] init];
    [messageToBeAdded setIsSender:sender];

    NSArray *arr = [input componentsSeparatedByString:[NSString stringWithFormat:@"PRIVMSG %@ :",[connection channel]]];
    [messageToBeAdded setMessage:[arr objectAtIndex:1]];

    arr = [input componentsSeparatedByString:@"!"];

    if (sender) {
        [messageToBeAdded setSender:[connection nick]];
    } else {
        NSString *tmp = [arr objectAtIndex:0];
        [messageToBeAdded setSender:[tmp substringWithRange:NSMakeRange(1, [tmp length]-1)]];
    }

    [_messageList addObject:messageToBeAdded];

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[_messageList count]-1 inSection:0];
    [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}

我到处寻找,我确信它与tableview的添加部分有关。我将不胜感激任何帮助或指导。

谢谢!

编辑: 我刚刚意识到这与使用自定义单元格有关。我创建了一个新项目并试图模拟我一步一步完成的工作。一切都工作得很好,我使用UILabel的自定义单元格。 UILabel连接到带有插座的UITableViewCell类,这就是问题发生的地方。

#import <UIKit/UIKit.h>

@interface CustomCell : UITableViewCell

@property (strong, nonatomic) IBOutlet UILabel *myLabel;
@end

任何想到这里可能出错的地方?

3 个答案:

答案 0 :(得分:1)

我猜您工具栏中有UITextField。尝试...

[aTextField resignFirstResponder];

...当您按下发送/返回按钮时。

答案 1 :(得分:1)

文本字段控制键盘,因此resignfirstresponder会向键盘发送消息以自行删除。乐队是移动到屏幕底部还是在按下发送按钮后删除。无论哪种方式做迈克尔所说的事情,一旦键盘消失,你就会知道横幅会发生什么。我希望这有帮助!

答案 2 :(得分:1)

您可以使用UITextFieldDelegate -

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
     [textField resignFirstResponder];
}

或者,如果你有textOield的IBOutlet,那么在'键盘将隐藏'中调用resignFirstResponder

// Keyboard will hide
- (void)keyboardWillHide {

      [self.myTextField resignFirstResponder];

      [UIView animateWithDuration:0.25 animations:^{
          [self.tableView setFrame:CGRectMake(0, 0, 320, 481)];
      }];

      [UIView animateWithDuration:0.25 animations:^{
          [self.toolBar setFrame:CGRectMake(0, 393, 320, 43)];
      }];    
}