2016-11-03 3 views
0

ビュー(テーブルビューを含む)が読み込まれるときに、テーブルビューの下にスクロールします。これは素晴らしいです。しかし、私のボタン(sendReply)の1つがタップされているとき、私はまた、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

と述べたように、scrollRectToVisibleは私が行く方法です。表示したいボタンの矩形内を通過するtableViewのスクロールビューを呼び出します。 obj-cを使用してからしばらくしていますが、

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

?構文が間違っている可能性がありますが、それはあなたがどこに行くのかを知るには十分近いはずです。迅速で

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

私は混乱しています - scrollViewは.hファイルで宣言されていません - のみUITableView?何か不足していますか?例えば。上記のコードをドロップすると、scrollViewが宣言されていないと表示されます(これは意味がありません)? –

+0

let scrollView = tableView.scrollViewが存在しません。 UITableViewはUIScrollViewから継承していますので、既にこのメソッドがあります – Andrea

+0

これを混乱させて申し訳ありませんが、擬似コードを与えるだけで、tableView内のscrollViewを参照するアイデアを得ることができました。 –

0

それはあなたの説明に基づいて、奇妙なよう。何が起こっているのかを見つけるために、より多くのコードが必要です。最後のセルを一番下にスクロールしたいと推測できます。したがって、tableviewのcontentsizeがフレームよりも大きくなっていることを確認してください。

0

この1

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]; 
} 
関連する問題