Я хочу отобразить пользовательский интерфейс, который имеет сегментированный элемент управления, и другое табличное представление для каждого раздела сегментированного элемента управления; так, 2 вида таблицы (приятели и сгустки), которые могут переключаться между ними. Для реализации этого, я сделал следующийКак создать экземпляр UIView/UITableView из xib (nib) в ViewController
- Создать ViewController в раскадровке
- Удалить Вид из ViewController
- Создать новый UIViewController быстрого класс с ассоциированным XIb файлом
- Помещенный сегментированного управление в главном UIView в xib
- Поместите внутренний элемент UIView внутри основного UIView, чтобы взять место, где видны таблицы, где его заменить
- Создано два подкласса UITableView и соответствующие XIB файлы
Некоторые опции я думал о:
- я могу установить класс внутренней UIView в Interface Builder быть у одного из представлений таблицы, но я не знаю, как создать экземпляр другого вместо первоначального. Если бы я создал перекрывающиеся внутренние UIViews, каждый из которых был связан с представлением таблицы и спрятал один из них при переключении сегментированного элемента управления, это фактически работает, но перекрывающийся характер просмотров делает компоновку сложной и неинтуитивной.
- То, что я хочу знать, как сделать: Инстанцировать взгляды таблицы вместо одного основного UIView элемента
- Альтернатива: Есть один UITableView подкласса, который имеет состояние на основе состояния сегментированного контроля за какие данные он отображает. Мне это не нравится, потому что он будет смешивать код для табличных представлений. В этом случае мне больше не понадобилось бы использовать xibs, я мог бы сделать это в раскадровке только с одним табличным представлением.
** ViewController Код **
@objc(BuddiesBunchesViewController) class BuddiesBunchesViewController: UIViewController {
@IBOutlet weak var segmentedControl: UISegmentedControl!
@IBOutlet weak var tableView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// Instantiate tableView here to BuddiesTableView
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func segmentedControlIndexChanged(sender: AnyObject) {
switch segmentedControl.selectedSegmentIndex {
case 0: // Buddies
// Set tableview to the buddies table view
case 1: // Bunches
// Set tableview to the buddies table view
default:
break;
}
}
}
** Table View **
@IBDesignable class BuddiesTableView: UITableView, UITableViewDataSource, UITableViewDelegate {
var view: UIView!
var nibName: String = "BuddiesTableView"
//init
override init(frame: CGRect) {
// set properties
super.init(frame: frame)
// Set anything that uses the view or visible bounds
setup()
}
required init(coder aDecoder: NSCoder) {
//set properties
super.init(coder: aDecoder)
// Setup
setup()
}
func setup() {
view = loadViewFromNib()
view.frame = self.bounds
view.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight
addSubview(view)
}
func loadViewFromNib() -> UIView {
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: nibName, bundle: bundle)
let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
return view
}
// MARK: - Table View
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "MyTestCell")
cell.textLabel?.text = "\(indexPath.row)"
return cell
}
}
К сожалению. @ Amit89 избил меня. –
Хорошо, я никогда не думал о том, чтобы вытащить datasource tableview и делегировать отдельные классы. Итак, после изменения управления сегментом, как бы я поменял эти классы? Не могли бы вы предоставить небольшой код? – hoffware
Я добавил код к своему ответу. –