Master Detailアプリケーションの詳細側にTableViewを使用したいと思います。私はXcodeの標準的なマスターディテールプロジェクトから始め、それに付属の標準アプリケーションを削除し、標準のUIViewディテールコントローラーを削除し、TableViewコントローラーを追加して、テスト用のプロトタイプセルにTextViewを追加し、新しいTableView。私はUITableViewCellをサブクラス化し、TextViewからコンセント(detailTextView)をサブクラス(TableViewCell)に作成しました。 DetailViewController.swiftのクラスをUIViewControllerからUITableViewControllerに変更しました。私は正常に文字列stringForTextView = "String for TextView"
をマスターから詳細に渡しています。しかし、私はTextViewにその文字列を表示する方法を理解できません。テキストビューのテキストをコンセント(detailTextView.text
)を介して詳細ビューで参照しようとしましたが、得られた文字は"Use of unresolved identifier detailTextView"
です。詳細を使用して、TextView(Master-Detailプロジェクト、Swift、iOS)で文字列を表示する方法
ご協力いただけると助かります。
関連コードを以下に示します。
それが参考になる場合にも、ここでプロジェクト全体をダウンロードすることができます。 http://greendept.com/MasterDetailTwoTableViews/
TableViewCell.swift(詳しくはプロトタイプ電池用サブクラス)
import UIKit
class TableViewCell: UITableViewCell {
@IBOutlet weak var detailTextView: UITextView!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
DetailViewController.swift
import UIKit
class DetailViewController: UITableViewController {
var stringForTextView : String?
var detailItem: AnyObject? {
didSet {
// Update the view.
self.configureView()
}
}
func configureView() {
// THE NEXT TWO LINES WORK: PASSED IN STRING PRINTS TO CONSOLE
let printThis = stringForTextView! as String
print("\(printThis)")
// BUT THE REFERENCE TO THE OUTLET BELOW DOES NOT WORK, GIVES
// "Use of unresolved identifier detailTextView"
detailTextView.text = printThis
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.configureView()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
MasterViewController.swift
import UIKit
class MasterViewController: UITableViewController {
var detailViewController: DetailViewController? = nil
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
if let split = self.splitViewController {
let controllers = split.viewControllers
self.detailViewController = (controllers[controllers.count-1] as! UINavigationController).topViewController as? DetailViewController
}
}
override func viewWillAppear(animated: Bool) {
self.clearsSelectionOnViewWillAppear = self.splitViewController!.collapsed
super.viewWillAppear(animated)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Segues
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showDetail" {
if let indexPath = self.tableView.indexPathForSelectedRow {
let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController
controller.stringForTextView = "String for TextView"
controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
controller.navigationItem.leftItemsSupplementBackButton = true
}
}
}
// MARK: - Table View
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
return cell
}
override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
// Return false if you do not want the specified item to be editable.
return true
}
}
詳細をテーブルビューとして設定したのはなぜですか?テキストビュー、テキストフィールド、またはラベルを持つ標準のUIViewControllerサブクラスは理にかなっています。テーブルビューを使用する場合は、セルを提供するためにすべてのtableviewデータソースメソッドを実装する必要があります – Paulw11