解析度(多感谢克里斯托夫!)
前期工作
- 我的工作一开始的单页的应用程序,包括默认
UIViewController
的( ViewController.swift
)。
- 我添加按钮的视图(和调整它们的外观和等)
- 我加了一个
UITableViewController
,并创建了自己的自定义类为它(MyTableViewController.swift
)
- 在表格的原型细胞我添加了几个标签来填充数据,并创建了我自己的单元格自定义类()
- 然后我创建了从最初的
UIViewController
到UITableViewController
中的表中的按钮
- 每个赛格瑞具有独特
Identifier
(这将在以后使用,但现在它是允许的ID从最初的观点传递给表视图)
在这一点上,该应用程序“工作”,但我希望有一些按钮(无论是在表的顶部还是底部)来处理表中所选的任何数据。当我开始这个线程时,我添加了一个工具栏,但它基本上固定在原型单元格的下面,当有更多的数据行可以放在单个屏幕上时,它也被滚动并直到该列表一直滚动到最后。
修复 - 又名克里斯托夫来救援
- 开始通过嵌入内导航控制器
- 初始视图我最初感到困惑的是什么被嵌入到了什么中,希望这张照片能让我变得更加美好牛逼更清晰
- 这样做的结果,修改了故事板正是如此:
- 我后来去我的表视图控制器场景和插入导航项目成现在出现在该视图顶部的空间:
- 对此,我能够加入栏按钮项目 S:
- 并配有多种自定义代码(更多关于这下面)能够得到这样的:
代码
- 此时,对于`ViewController.swift`代码相对简单:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var b1: UIButton!
@IBOutlet weak var b2: UIButton!
@IBOutlet weak var b3: UIButton!
var buttonId: String = ""
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
b1.titleLabel?.adjustsFontSizeToFitWidth = true
b2.titleLabel?.adjustsFontSizeToFitWidth = true
b3.titleLabel?.adjustsFontSizeToFitWidth = true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let destination = segue.destinationViewController as! MyTableViewController
destination.buttonId = segue.identifier
}
}
- 用于`MyTableViewCell.swift`也相当简单(至少现在)的代码:
import UIKit
class MyTableViewCell: UITableViewCell {
@IBOutlet weak var l1: UILabel!
@IBOutlet weak var l2: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Add bordering to bottom of each cell
let border = CALayer()
let width = CGFloat(1.0)
border.borderColor = UIColor.darkGrayColor().CGColor
border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height: self.frame.size.height)
border.borderWidth = width
self.layer.addSublayer(border)
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
- 为`代码MyTableViewController.swift`是,在另一方面,更复杂的 - 也许是因为有更多的只是它:
import UIKit
class MyTableViewController: UITableViewController {
@IBOutlet weak var b1: UIBarButtonItem!
@IBOutlet weak var b2: UIBarButtonItem!
var buttonId: String!
var oldRow = -1
// The data below is clearly just for testing, eventually this should be pulled from file or DB
var locationList: [LocationObject] = [
LocationObject(name: "name-01", address: "addr-1", selected: false),
LocationObject(name: "name-02", address: "addr-2", selected: false),
LocationObject(name: "name-03", address: "addr-3", selected: false),
LocationObject(name: "name-04", address: "addr-3", selected: false),
LocationObject(name: "name-05", address: "addr-3", selected: false),
LocationObject(name: "name-06", address: "addr-3", selected: false),
LocationObject(name: "name-07", address: "addr-3", selected: false),
LocationObject(name: "name-08", address: "addr-3", selected: false),
LocationObject(name: "name-09", address: "addr-3", selected: false),
LocationObject(name: "name-10", address: "addr-3", selected: false),
LocationObject(name: "name-11", address: "addr-1", selected: false),
LocationObject(name: "name-12", address: "addr-2", selected: false),
LocationObject(name: "name-13", address: "addr-3", selected: false),
LocationObject(name: "name-14", address: "addr-3", selected: false),
LocationObject(name: "name-15", address: "addr-3", selected: false),
LocationObject(name: "name-16", address: "addr-3", selected: false),
LocationObject(name: "name-17", address: "addr-3", selected: false),
LocationObject(name: "name-18", address: "addr-3", selected: false),
LocationObject(name: "name-19", address: "addr-3", selected: false),
LocationObject(name: "name-10", address: "addr-3", selected: false),
]
// This embedded class is to support the above data. It may get replaced in final code
class LocationObject {
var name: String!
var address: String!
var selected: Bool!
init(name: String, address: String, selected: Bool) {
self.name = name
self.address = address
self.selected = false
}
}
override func viewDidLoad() {
super.viewDidLoad()
// code to hide/expose the navbar (top) and toolbar(bottom) when the view loads
navigationController?.navigationBarHidden = false
navigationController?.toolbarHidden = true
}
// code to hide the navbar and toolbar when this view goes away
override func viewWillDisappear(animated: Bool) {
navigationController?.navigationBarHidden = true
navigationController?.toolbarHidden = true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return locationList.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("resultCell", forIndexPath: indexPath) as! MyTableViewCell
let row = indexPath.row
let item = locationList[row]
cell.l1.text = item.name
cell.l2.text = item.address
return cell
}
override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(indexPath) as! MyTableViewCell
let row = indexPath.row
cell.accessoryType = .None
locationList[row].selected = false
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
b1.enabled = true
let cell = tableView.cellForRowAtIndexPath(indexPath) as! MyTableViewCell
let row = indexPath.row
locationList[row].selected = !locationList[row].selected
cell.accessoryType = (locationList[row].selected == true) ? .Checkmark : .None
cell.highlighted = false
cell.setHighlighted(false, animated: true)
// TOGGLE SELECTION
if oldRow == row {
b1.enabled = false
let oldIndexPath = NSIndexPath(forRow: oldRow, inSection: 0)
tableView.deselectRowAtIndexPath(oldIndexPath, animated: true)
oldRow = -1
}
else {
oldRow = row
}
}
}
而且,简而言之就是它。我仍然处于开发我的应用程序的初期阶段 - 不知何故,我确信我会在我前进的过程中发布更多关于实现的问题,但希望以上内容能够帮助其他人可能会遇到同样的问题,或类似的问题。
再次感谢Christoph提供了关于将视图嵌入导航视图控制器等方面的非常需要的方向。
我希望这有助于!不要犹豫,问我进一步的信息:) – Christoph
我喜欢它 - 但我想我失去了一些东西,因为它失败了。这可能是我的错,因为没有提供更全面的图片。我有一个初始的'ViewController',它目前有3个按钮。每个按钮都是'UITableViewController'的缩写,每个按钮都有一个不同的'标识符' - 它最终会被我的代码使用。 随着我根据您的建议所做的更改,segue失败,并显示错误消息:“无法将'UINavigationController'类型的值(0x109452860)转换为'gj3.ExistingLocationsViewController'(0x107ac19e8)”。 –
我也考虑过使用一个标准的视图并为它添加一个导航栏和表格视图(假设表格视图仍然会在其区域内滚动) - 但之后我不确定如何修改我的代码,因为视图不会基于'UITableViewController',我不确定我是否可以使用自定义的'UITableVIewController'类来应用Table View。 一般来说,我更喜欢你的想法,因为它*应该*(我相信)对我的代码意味着更少的更改 - 但我必须弄清楚如何解决这个问题 –