1

だから私は、詳細ビューに移動するいくつかのテーブルビューを持つアプリに取り組んでおり、その詳細ビューはマップビューまたはウェブビューに移動できます。これが私が意味するものの例です: ここに画像の説明を入力

いくつかの詳細グループ (詳細、ウェブ、マップ) を作成する代わりに、すべてのテーブルビューを作成し、同じ詳細ビューに移動してそこに情報を配置します。できません。今はそれほど問題ではありませんが、私は自分がすべきことをしていないと思います。基本的に、私はこの方法で情報を渡します: 「prepareforsegue」機能では、テーブルビューから詳細ビューまで、「if indexPath.row == 0」を使用し、選択された行に従って情報を渡すだけです。整数がありますテーブルビューでクリックされた行の番号に設定された変数も詳細ビューに渡されるため、詳細ビューでは、どのWebサイトをWebビューに渡すか、または場所をマップビューに渡すかがわかります。

4

1 に答える 1

1

単一のテーブル行/詳細ビューに関連するすべての情報をカプセル化するクラスが必要です。と呼びましょうmodel

テーブル ビュー コントローラーでは、models の配列があります。

var models = [model]()

cellForRowAtIndexPath特定のモデルに基づいてセルを返すようにオーバーライドします。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("someCellId", forIndexPath: indexPath) as! UITableViewCell

    let model = models[indexPath.row]

    // Set the title of the cell to be the title of the logItem
    cell.textLabel?.text = model.name
    cell.detailTextLabel?.text = model.details
    return cell
}

ストーリーボードで詳細ビューへのセグエを作成し、全体modelを詳細ビューに渡します

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
    if (segue.identifier == "segueToDetail") {
        var svc = segue.destinationViewController as! DetailViewController
        svc.model = models[tableView.indexPathForSelectedRow()!.row]
    }
}

この方法では、1 つのオブジェクトのみを渡し、すべての詳細ビュー ラベルなどを設定する必要はありません。また、詳細ビューは同じオブジェクトをマップ ビューまたは他のビューに渡すことができます。

于 2015-08-17T06:18:53.253 に答える