我正在尝试使用ios中的tableview和textfield创建一个聊天应用程序,但我希望在uibutton的click事件的tableview最后一行的文本字段上方看到最后一条发送消息。 怎么做请帮助我。
-(IBAction)sendmessage:(id)sender
{
NSError *error;
NSFileManager *filemanager = [NSFileManager defaultManager];
NSMutableDictionary *messageDictionary = [NSMutableDictionary new];
NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
NSString *messageString = [array objectAtIndex:0];
NSString *datallist =[messageString stringByAppendingPathComponent:@"message.plist"];
if(messagearray == Nil)
{
messagearray = [[NSMutableArray alloc]init];
}
NSInteger contactid = 0;
if(datallist)
{
BOOL isFileExist = [filemanager fileExistsAtPath:datallist];
if(isFileExist)
{
messagearray = [NSMutableArray arrayWithContentsOfFile:datallist];
}
}
if(messagearray.count >0)
{
NSDictionary *dic = [messagearray objectAtIndex:(messagearray.count - 1)];
NSInteger val = [[dic objectForKey:@"id"] integerValue];
contactid = val+1;
}
else{
contactid = 1;
}
[messageDictionary setObject:[NSNumber numberWithInteger:contactid] forKey:@"id"];
[messageDictionary setObject:messageText.text forKey:@"id"];
[messagearray addObject:messageDictionary];
NSData *data = [NSPropertyListSerialization dataFromPropertyList:messagearray format:NSPropertyListXMLFormat_v1_0 errorDescription:&error];
if(data)
{
[data writeToFile:datallist atomically:YES];
[messagingtable reloadData];
}
else {
NSLog(@"Error in save data: %@",error);
}
}
答案 0 :(得分:1)
尝试scrollToRowAtIndexPath:atScrollPosition:animated:
UITableView
方法
滚动表视图,直到索引路径标识的行为止 在屏幕上的特定位置。
<强>目标c 强>
- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath
atScrollPosition:(UITableViewScrollPosition)scrollPosition
animated:(BOOL)animated;
<强>夫特强>
func scrollToRowAtIndexPath(_ indexPath: NSIndexPath,
atScrollPosition scrollPosition: UITableViewScrollPosition,
animated animated: Bool)
<强>参数强>
indexPath
索引路径,用于标识表视图中的行 它的行索引和部分索引。NSNotFound是一个有效的行索引,用于滚动到零的部分 行。
scrollPosition
一个标识相对位置的常量 滚动结束时行的表格视图(顶部,中间,底部)。 有关有效常量的说明,请参阅表视图滚动位置。
animated
如果你想要改变位置的动画,那就是;不,如果 它应该是即时的。
已修改
-(IBAction)sendmessage:(id)sender
{
...............
if(data)
{
[data writeToFile:datallist atomically:YES];
[messagingtable reloadData];
// here, you need to scroll your table
[messagingtable scrollToRowAtIndexPath:[NSIndexPath indexPathForRow: messagearray.count-1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
}
else {
NSLog(@"Error in save data: %@",error);
}
}
答案 1 :(得分:0)
您已在数组和重新加载表中添加了响应
[self.tblChatData reloadData];
滚动表
时必须添加indexpath[self.tblChatData scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:arrContent.count-1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];