Master Detail app의 세부면에 TableView를 사용하고 싶습니다. 나는 Xcode의 표준 Master Detail 프로젝트로 시작하여 함께 제공되는 표준 앱을 삭제하고, 표준 UIView 세부 컨트롤러를 삭제하고, TableView 컨트롤러를 추가하고, 테스트 용 프로토 타입 셀에 TextView를 추가하고, 새로운 Segue를 생성했습니다. 새로운 TableView. 나는 UITableViewCell을 하위 클래스 화하고 TextView에서 하위 클래스 (TableViewCell)로 콘센트 (detailTextView)를 만들었습니다. UIViewController에서 DetailViewController.swift의 클래스를 UITableViewController로 변경했습니다. 나는 성공적으로 문자열 stringForTextView = "String for TextView"
을 마스터에서 상세로 전달하고있다. 하지만 TextView에서 해당 문자열을 표시하는 방법을 알아낼 수 없습니다. 자세히보기에서 TextView 텍스트를 콘센트 (detailTextView.text
)를 통해 보려고했으나 "Use of unresolved identifier detailTextView"
UITableView를 자세히 사용하여 TextView (Master-Detail 프로젝트, Swift, iOS)에서 문자열을 표시하는 방법
도움을 주시면 감사하겠습니다.
관련 코드는 아래에 나와 있습니다. 그 도움이 될 것입니다 경우
또한 여기에 전체 프로젝트를 다운로드 할 수 있습니다 http://greendept.com/MasterDetailTwoTableViews/
TableViewCell.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.
}
}
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
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