1

iPhone開発初心者です。私は今、いくつかの Android アプリを作成したので、iPhone で試してみようと思いました。

ただし、ストーリーボードのナビゲーションは直感に反すると思います。2 つの画面を持つ基本的なタブ付きアプリを作成しました。どちらの画面にも、さまざまなデータを表示するテーブル ビューが含まれています。ユーザーがテーブルのセルをクリックすると、新しい画面が開きます。単純?どうやらそうではありません。

新しいviewControllerを追加し、ルートタブ付きビューコントローラーからリンクされている既存のtableViewの1つでテーブルセルをctrlクリックして、新しいコントローラーにシーグを追加しようとしました。セルをクリックしても、シミュレーターでは効果がありません。

新しいコントローラーをカスタム クラスにリンクして、これが落ち込んでいるかどうかを確認しようとしましたが、UIViewController から継承する新しい Objective-C クラスを作成しても、ドロップダウン ボックスに表示されません。

ビュー呼び出しの階層がどのように機能するかを誤解していない限り?

どんな助けでも大歓迎です!


編集:

OK、以下のアドバイスでさらに先に進むことができましたが、まだ十分ではありません. タブ ビュー オプションごとにナビゲーション コントローラーを追加しました。次に、セル行を Ctrl キーを押しながらクリックして新しい webview コントローラーにリンクし、プッシュする選択セットを選択しました。WebView をコントローラーに Ctrl キーを押しながらクリックしてアウトレット デリゲートにし、次のコードを行に追加しました。

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

    if (_webViewController == nil)
    {
        self.webViewController = [[[RSSWebViewController alloc]     initWithNibName:@"WebViewController" bundle:[NSBundle mainBundle]] autorelease];
    }
    RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row];
    _webViewController.entry = entry;
    [self.navigationController pushViewController:_webViewController animated:YES];
}

私も追加しました:

@property (retain, nonatomic) IBOutlet UIWebView *webView; 

新しいビュー コントローラーのヘッダー ファイルに。シミュレーターで行をクリックすると、次の例外がスローされます。

2013-03-23 17:21:17.241 RSS[1330:c07] *キャッチされていない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。

これまでのコメントをありがとう。:)

4

2 に答える 2

1

あなたの提案を行うには、セルからctrl +クリックする必要はありません。

UITableViewDelegate を設定する必要があります。

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDelegate_Protocol/Reference/Reference.html#//apple_ref/doc/uid/TP40006942を参照してください。

次に、Mike D が前述したように、didSelectRowAtIndexPath を使用する必要があります。

これにより、正しい方向に進むはずです。コンピューターを使用しているときに (今は電話で) もう一度確認します。問題が解決しない場合は、さらに詳しく説明できます。

于 2013-03-23T16:41:37.513 に答える
1

UINavigationControllerタブバーにリンクされているView Controllerとしてを持っている必要があります。次にUINavigationController、ルートView Controllerとしてテーブルを使用して現在のコントローラーに をリンクし、プッシュセグエを使用してセルを別のView Controllerにリンクする必要があります。したがって、各タブにナビゲーション コントローラーが用意されます。ナビゲーション コントローラーは、それを「プッシュ」できるようにするものです。それ以外の場合は、ビュー コントローラーがプッシュおよびポップされるときにビュー コントローラーのスタックと、それらを実行するために必要なアニメーションを管理するため、何も起こりません。私も始めたときにこの問題がありました。

セルがすべて静的でない限り、次のView Controllerに何を表示するかを伝えることができるように、現在のView Controllerから選択されたアイテムなどの情報を新しいView Controllerに転送する必要があります。これを行う 1 つの方法は、次のビュー コントローラーをプロパティを持つカスタム クラスにすることです。@property (strong, nonatomic) NSString* message;その後、プッシュ セグエを持つビュー コントローラーで、次のビュー コントローラーがプッシュされる直前に伝えることができます。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqualToString:@"your-segue-name"]) // The identifier in the Storyboard for segue (click on the segue)
    {
        // Sender will be cell
        NSString* message = [NSString stringWithFormat:@"cell %d!", [[self.tableView indexPathForCell:sender] row]];
        YourViewControllerClass* destination = [segue destinationViewController];                                                 
        destination.message = message;
    }
}
于 2013-03-23T16:35:56.833 に答える