2016-11-03 76 views
0

當我的View(包含Table View)加載時,我希望它滾動到表格視圖的底部。這很好。但是,當我點擊一個按鈕(sendReply)時,我也希望tableView滾動到底部。出於某種原因,當視圖最初加載時,滾動到tableView的底部工作,但是當我將它放在我的sendReply動作中時,[self bottomScroll:self]似乎不會觸發?當點擊uibutton時,以編程方式滾動到tableView底部

.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]; 
    } 

回答

0

這應該工作。當你點擊按鈕時,你確定messages.count是否大於0?你可以在該行設置一個斷點,看看這段代碼是否被執行。

您也可以嘗試-scrollRectToVisible作爲替代。

+0

messages.count絕對大於大於0時,該按鈕被竊聽 - 和斷點似乎表明該代碼被執行。超級奇怪。 –

+0

你可以在一個乾淨的項目上重現你的問題嗎?我做了你正在嘗試一個新項目,它似乎工作正常。我能想到的最後一個問題是indexPath中的「section:0」部分。你確定這也是正確的嗎? – phi

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) 
} 
+0

我很困惑 - scrollView沒有在.h文件中聲明 - 只有UITableView?我錯過了什麼嗎?例如。當我放下上面的代碼時,它說scrollView沒有被聲明(這是有道理的)? –

+0

讓scrollView = tableView.scrollView不存在。由於UITableView從UIScrollView繼承,所以你已經有了這個方法 – Andrea

+0

對不起,讓我感到困惑的是,我只是給了僞代碼來給你引用tableView裏面的scrollView的想法 –

0

它根據您的描述似乎有些奇怪。需要更多代碼才能找到正在發生的事情。可以推斷的是你想要將最後一個單元格滾動到底部。因此,請確保tableview的內容大小比垂直方向大。

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]; 
} 
相關問題