0

誰かが私のために明確にしてくれることを願っています。Universal Master Detail アプリを作成すると、tableview メソッドの didSelectRowAtIndexPath が iPad の選択のみを処理することに気付きました。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
    NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
    self.detailViewController.detailItem = object;
}
}

iPhoneのテーブルビューの選択がどこで処理されているか教えてもらえますか?

前もってありがとう、ティム

4

3 に答える 3

1
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {

Ipadのみのデータをチェックして追加しています。すべてのデバイスで機能するように、iPhoneもチェックするか、このチェックを削除する必要があります

IPhone を確認する場合は、次のいずれかの方法を使用します。

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 

また

if ([[UIDevice currentDevice] userInterfaceIdiom] ==UIUserInterfaceIdiomPhone)
于 2013-03-04T23:49:14.253 に答える
0

提案してくれてありがとう。ユニバーサルアプリを作成したときにCoreDataを選択していたことがわかりましたが、CoreDataを適切に使用していませんでした。Core Dataを活用し、すべてが正常に機能しています。

于 2013-03-05T23:53:17.490 に答える
0

ストーリーボードを使用していますか?その場合、tableView:didSelectRowAtIndexPath: は、識別子 @"showDetail" を持つセグエを介して処理されています。

したがって、テーブル ビュー デリゲート メソッドには何も必要ありません。

ストーリーボードをオフにすると、次のようになります。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        if (!self.detailViewController) {
            self.detailViewController = [[OCDDetailViewController alloc] initWithNibName:@"OCDDetailViewController_iPhone" bundle:nil];
        }
        self.detailViewController.detailItem = object;
        [self.navigationController pushViewController:self.detailViewController animated:YES];
    } else {
        self.detailViewController.detailItem = object;
    }
}

iPhoneとiPadの両方のケースを扱っています。

于 2013-03-04T23:54:56.713 に答える