1

iPod のようなコントロール (再生、一時停止など) を備えたアプリを構築しています。アプリには、各セルにトラック名を含む tableView があります。MainViewControllerwithUITableViewとカスタムUITableViewCellクラスがあります。プレーヤー コントロールは にありMainViewControllerます。

各セルに再生/一時停止ボタンもあります。NSNotificationsセルで再生ボタンが押されたときに通知を投稿するように設定できたので、トラック情報がオブザーバーとレスポンダー メソッドに送信されMainViewController、プレーヤー コントロール (によって駆動MPMoviePlayerController) が開始されます。

これは機能しますが、トラックが再生されると、セルの再生/一時停止ボタンを iPod コントロールの再生/一時停止ボタンの状態に「ミラーリング」する方法がわかりません。NSNotification observerすべてのセルに a を追加することが正しい方法だとは思いません。

追加情報: プレーヤーの再生/一時停止ボタンの画像は、MainViewController0.5 秒ごとに起動しplaybackstateMPMoviePlayerController. 再生中の場合、プレーヤー ボタン セットは再生イメージです。一時停止している場合は、一時停止イメージを設定します。tableCell の再生/一時停止ボタンも設定する実装はここにしようと考えています。

編集このメソッドは、UITableViewController 内で (NSNotification を介して) 再生状態が変化するたびに呼び出されます。(playButton再生状態に応じて更新しようとしているテーブルセルの再生/一時停止ではなく、プレーヤーコントロールの再生/一時停止ボタンです)。

- (void) updateViewForPlayerState
{
// Change playButton image depending on playback state
[playButton setImage:((moviePlayer.playbackState == MPMoviePlaybackStatePlaying) ? pauseBtnBG : playBtnBG) forState:UIControlStateNormal];

}
4

2 に答える 2

2

あなたがやろうとしていることの素晴らしい例は、アップル開発サイトで入手できます。

TableViewSuite

問題のプロジェクトはCustomTableViewCellと呼ばれます。このプロジェクトでは、タイマーを使用してセルを定期的に更新します。これは、説明からすると、似たようなことをしているように聞こえます。

セルの状態が変化したら、次のようにします。

  1. セルの状態を更新します。これはプラバックステートに反映されていると思います
  2. [cellsetNeedsDisplay]を呼び出します

これにより、カスタムセルは、設定した新しい状態で再描画されます。

これは、タイマーコールバックメソッドのテーブルビューコントローラーにあります

NSArray *visibleCells = self.tableView.visibleCells;
    for (CustomCell *cell in visibleCells) {
        [cell redisplay];
}

これは、カスタムテーブルビューセルにあります

- (void)redisplay {
    [customCellView setNeedsDisplay];
}
于 2012-06-15T19:01:32.887 に答える
1

[tableView reloadData]状態が変化したときに使用しcellForRowAtIndexPath:、データの状態 (つまり、セルが参照する曲が再生中かどうか) に従ってボタンを設定するセルを提供します。

また、通知の代わりに、通常のアプローチである委任を使用できます。ただし、特に複数のオブザーバーが必要な場合は、通知も機能します。

于 2012-06-18T21:48:39.190 に答える