2

ここに画像の説明を入力

こんにちは、これは私の最初の iPad アプリで、iPhone アプリを iPad に移植しようとしています。http://www.raywenderlich.com/のすべてのチュートリアルに従いましたが、まだ問題があります。

また、この質問を確認してください。まだ問題があります。2つのテーブルビューを持つSplitviewcontroller、デリゲートの問題

基本的に、SplitViewController に 2 つの UITableViewControllers があり、ルート ビュー コントローラーのテーブルビュー セルをクリックすると、別のテーブルビューの右側にある DetailsViewController に詳細を入力します。

問題は、配列データを渡すことはできますが、tableview reload メソッドを呼び出すことができないことです。


ここにコードがあります

LeftViewController

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    NSUInteger row = [indexPath row];

    if (row == 0){

        NSLog(@"Row 0 Pressed");  

         RightViewController *rightvc = [self.storyboard instantiateViewControllerWithIdentifier:@"displayenglish"];

        _locallayleft = [ConversationDatabase database].conversationsInfos;

        NSLog(@"Just pushed the array"); 

        rightvc.detailItem = _locallayleft;
        rightvc.title = @"Greetings";


    }

    else if (row == 1) {
        NSLog(@"Row 1 Pressed");  

         RightViewController *rightvc = [self.storyboard instantiateViewControllerWithIdentifier:@"displayenglish"];


        _locallayleft = [ConversationDatabase database].conversationsInfosgeneral;

        rightvc.detailItem = _locallayleft;
        rightvc.title = @"General Conversation";

    }

-----------------------------------------------------------------------------------------
RightViewController


- (void)setDetailItem:(NSArray *)newDetailItem
{

    if(_detailItem != newDetailItem) {

        _detailItem = newDetailItem;

      [self configureView];

    }
}


- (void)configureView
{
    if (self.detailItem) {


        self.locallay = self.detailItem;

        _listOfCoversation = [[NSMutableArray alloc] init];
        for (ConversationInEnglish *c in _locallay)

        {
            NSString *english = c.english;
            NSLog(@"setDetails Item get called");
            NSLog(@"%@",english);

            [_listOfCoversation addObject:english];
        }
        [self.tableView reloadData];
        NSLog(@"Trying to reload TableView");

    }


}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self configureView];

}






#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    return [_locallay count];

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"English";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    ConversationInEnglish *con = _locallay [indexPath.row];
    _englishLabel = (UILabel *) [cell viewWithTag:200];

    _englishLabel.text = con.english;
    NSLog(@"My data from cell %@",con.english );

    [_englishLabel setFont:[UIFont fontWithName:@"Open Sans" size:22]];

    _myanmarLabel = (UILabel *) [cell viewWithTag:300];
    [_myanmarLabel setFont:[UIFont fontWithName:@"TharLon" size:17]];

    _tonebasedLabel = (UILabel *) [cell viewWithTag:400];
    _tonebasedLabel.text = con.tone_based;


    UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"tableviewcell.png"]];

    self.tableView.backgroundColor = background;

    return cell;
}
4

1 に答える 1

1

右側のテーブルを更新する代わりに、左側のテーブルの行をタップすると、代わりにストーリーボードからまったく新しいテーブルをインスタンス化しているように見えますが、右側のテーブルをそれに置き換えていません。

これを修正する方法を正確に説明するにはコンテキストが十分ではありませんが、左側のテーブルの行をタップしたときに、detailItem プロパティを設定して右側のテーブルを更新することをお勧めします。

他のテーブル ビューにアクセスする必要があります。アプリケーションのセットアップ方法に応じて、これを行う方法がいくつかあります。iPhone と iPad の両方で同じ左側のテーブル ビューを使用している場合は、おそらく、それを見つけるための条件付きコードが必要になるでしょう。例:

if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {
    DetailViewController *detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];
    detailViewController.detailItem = newDetailItem;
}

または、ストーリーボードから構成することもできます。いずれにせよ、重要なのは、ストーリーボードから新しいテーブル ビューをインスタンス化するのではなく、既存のテーブル ビューを見つけて更新することです。

于 2013-04-06T10:17:00.537 に答える