使用tableview在文本字段上方显示最后一条文本消息

时间:2015-09-16 06:19:39

标签: ios uitableview uibutton textfield

我正在尝试使用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);

    }


}

2 个答案:

答案 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);
    }
}

参考:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableView_Class/index.html#//apple_ref/occ/instm/UITableView/scrollToRowAtIndexPath:atScrollPosition:animated

答案 1 :(得分:0)

您已在数组和重新加载表中添加了响应

[self.tblChatData reloadData];

滚动表

时必须添加indexpath
[self.tblChatData scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:arrContent.count-1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];