当点击uibutton时,以编程方式滚动到tableView的底部

时间:2016-11-03 22:01:55

标签: ios objective-c uitableview

当我的View(包含表格视图)加载时,我希望它滚动到表格视图的底部。这非常有效。但是,当我的一个按钮(sendReply)被点击时,我也希望tableView滚动到底部。出于某种原因,滚动到tableView的底部可以在最初加载View时工作,但是当我将其置于sendReply操作中时,[self bottomScroll:self]似乎不会触发?

的.m

-(void)viewDidAppear:(BOOL)animated {

            [super viewDidAppear:animated];

            [self bottomScroll:self];

          }

 - (void)bottomScroll:(id)sender {

            if (self.messages.count > 0)
                [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:self.messages.count-1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];

        }


    - (IBAction)sendReply:(id)sender {

            [self bottomScroll:self];  
    }

4 个答案:

答案 0 :(得分:0)

这应该有效。点击按钮时,您确定messages.count大于0吗?您可以在该行设置断点,并查看是否执行了此代码。

您也可以尝试-scrollRectToVisible作为替代方案。

答案 1 :(得分:0)

如phi所述,scrollRectToVisible将是我的方式。调用tableView的滚动视图,传递到要显示的按钮的矩形。自从我使用obj-c以来已经有一段时间了,但是:

-(IBAction)sendReply: (id)sender {
    [scrollView scrollRectToVisible: sendReply.frame, animated: YES]
}

?语法可能是错误的,但它应该足够接近,以便让你到达目的地。

在swift:

@IBAction func sendReply(sender: UIButton/AnyObject) -> Void {
    let scrollView = tableView.scrollView
    scrollView.scrollrectToVisible(_ rect: sender.frame, animated: true)
}

答案 2 :(得分:0)

根据您的描述,这似乎很奇怪。需要更多代码才能找到最新消息。可以推断出你想要将最后一个单元格滚动到底部。因此,请确保tableview的内容大于垂直框架。

答案 3 :(得分:0)

试试这个

if (self.tableView.contentSize.height > self.tableView.frame.size.height){

        CGPoint point = CGPointMake(0, self.tableView.contentSize.height - self.tableView.frame.size.height);
        [self.tableView setContentOffset:point];
}