首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将表视图添加到详细视图控制器

将表视图添加到详细视图控制器
EN

Stack Overflow用户
提问于 2017-07-22 09:26:16
回答 1查看 718关注 0票数 0

我正在制作我的第一个应用程序。现在我正在试着做一个设置页面。到目前为止,它看起来是这样的。

我将拆分视图控制器连接到一个主视图控制器和一个细节视图控制器(代码如下)。正如您所看到的,现在拆分视图控制器的左侧有一个包含不同按钮的表视图。当每个按钮被按下时,我希望它在视图控制器的右侧显示一个单词列表。它确实已经显示了一个单词列表,但我希望它在表视图中显示水平堆叠的单词,我不确定如何开始这样做。

代码语言:javascript
运行
复制
//
//  MasterViewController.swift
//  firstapp
//
//  Created by Anthony Rubin on 7/18/17.
//  Copyright © 2017 rubin. All rights reserved.
//

import UIKit

protocol WordSelectionDelegate: class {
func wordSelected(newWord: Word)
}

class MasterViewController: UITableViewController {
var words = [Word]()

weak var delegate: WordSelectionDelegate?

override func viewDidLoad() {
    super.viewDidLoad()



}
required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)!

    self.words.append(Word(name: "initial /l/ 1 syllable", description: "lake lamb lamp lark leaf leash left leg lime lion lips list lock log look love lunch"))

    self.words.append(Word(name: "initial /l/ multisyllabic", description: "words, words, words, words"))

    self.words.append(Word(name: "intersyllabic /l/", description: "words, words, words, words"))

    self.words.append(Word(name: "final /l/", description: "words, words, words, words"))

    self.words.append(Word(name: "initial /pl/", description: "words, words, words, words"))

    self.words.append(Word(name: "initial /bl/", description: "words, words, words, words"))

    self.words.append(Word(name: "initial /fl/", description: ""))

    self.words.append(Word(name: "initial /gl/", description: "words, words, words, words"))

    self.words.append(Word(name: "initial /kl/", description: ""))

    self.words.append(Word(name: "initial /sl/", description: ""))

    self.words.append(Word(name: "final /l/ clusters", description: ""))


}


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return self.words.count
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 

    // Configure the cell...
    let word = self.words[indexPath.row]
    cell.textLabel?.text = word.name
    return cell
}

override  func tableView(_ tableView: UITableView, didSelectRowAt
    indexPath: IndexPath) {
    let selectedMonster = self.words[indexPath.row]
    self.delegate?.wordSelected(newWord: selectedMonster)
    if let Detail = self.delegate as? Detail {
        splitViewController?.showDetailViewController(Detail, sender: nil)
    }

}

__

代码语言:javascript
运行
复制
import UIKit



class Detail: UIViewController {





@IBOutlet weak var descriptionLabel: UILabel!

var word: Word! {
    didSet (newWord) {
        self.refreshUI()
    }
}

func refreshUI() {

    descriptionLabel?.text = word.description


}

override func viewDidLoad() {

    super.viewDidLoad()
   refreshUI()
}

override func didReceiveMemoryWarning() {

    super.didReceiveMemoryWarning()
}

}
extension Detail: WordSelectionDelegate {
func wordSelected(newWord: Word) {
    word = newWord
}
}

--

代码语言:javascript
运行
复制
class Word {
let name: String
let description: String




init(name: String, description: String) {
    self.name = name
    self.description = description


}
}

--

代码语言:javascript
运行
复制
import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?


func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let splitViewController = self.window!.rootViewController as! UISplitViewController
    let leftNavController = splitViewController.viewControllers.first as! UINavigationController
    let MasterViewController = leftNavController.topViewController as! MasterViewController
    let Detail = splitViewController.viewControllers.last as! Detail

    let firstWord = MasterViewController.words.first
    Detail.word = firstWord

    MasterViewController.delegate = Detail

    return true
}

PS。如果你看一下MasterViewController代码,你会发现它说的是"description“。description中包含的列表应该显示在右侧的表视图中。

EN

回答 1

Stack Overflow用户

发布于 2019-01-22 17:17:50

在主视图控制器的func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)中,需要替换视图控制器。从应用程序委托中获取拆分视图控制器实例,现在将其传递给splitview控制器视图控制器属性,分配所需的视图控制器对象,并确保所需的视图控制器对象具有导航控制器。

代码语言:javascript
运行
复制
  override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if indexPath.row == 1 {
        let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
        let splitViewController = appDelegate.window!.rootViewController as! UISplitViewController
        let nextViewController = storyBoard.instantiateViewController(withIdentifier: "yourviewcontrollername") as! UINavigationController
        splitViewController.viewControllers[1] = nextViewController
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45249741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档