2015-08-20 5 views
0

Я хотел бы иметь несколько видов, каждый из которых содержит 2 таблицы (каждый из которых занимает половину экрана). Каждое представление будет разделено на один из таблиц. Табличные представления будут вести себя более или менее независимо.Как создать больше представлений, разделяющих табличное представление с помощью раскадровки

Я думал, что из двух вариантов:

1) независимых взглядов, в которых общий TableView перезагружается каждый раз, когда вид приходит на место.

2) Один единственный TableView разделяют каждого вида (подобно тому, что происходит в контроллере Разделить (хотя я не могу использовать SPLITVIEW, как хотелось бы, чтобы использовать адаптивную схему, когда устройства находятся в портретном режиме).

у меня есть ощущение, что второй подход был бы лучше, но я не мог придумать способ, чтобы разработать ее. Каков наилучший способ получить это?

Я попытался сделать, как было предложено Андрей Гордийчук (ответ 1), но я думаю, что все испортил ....:
Когда я запускаю приложение, он строит успешные но он сработает, когда я попытаюсь добраться до общего представления с ошибкой EXC_BAD_ACCESS.

Вот SharedReusableTableViewDelegate:

class SharedReusableTableViewDelegate: UIViewController, UITableViewDelegate, UITableViewDataSource { 

var databasePath = String() 
var selectedVerse : Int = 1 

func registerClass(UITableViewCell, forCellReuseIdentifier identifier: String){} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let row : Int = indexPath.row 
    var getVerse = DatabaseDB() 
    var verse = DatabaseVars() 
    (verse.book, verse.chapter, verse.verseNumber, verse.extra, verse.verseText) = getVerse.getVerseBy(row, database: databasePath as String) 
    let cell: AnyObject = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) 
    cell.textLabel?!.text = "\(verse.chapter),\(verse.verseNumber) \(verse.verseText)" 
    return cell as! UITableViewCell 
} 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    let numberofCells = 200 
    return numberofCells 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     selectedVerse = indexPath.row + 1 
     println("You selected cell #\(selectedVerse)!") 
} 

} 

А вот контроллер для вида с Table1:

class Table1: UIViewController { 

@IBOutlet weak var verseView: UITableView! 
var databasePath = NSString() 
var currentPath = NSString() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let filemgr = NSFileManager.defaultManager() 
    let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) 
    let docsDir = dirPaths[0] as! String 
    databasePath = docsDir.stringByAppendingPathComponent("LuceDaLuce.db") 
    var fileCopyError : NSError? = NSError() 
    currentPath = NSBundle.mainBundle().pathForResource("tmp", ofType: "db")! 
    println("currentPath: \(currentPath)") 
    if !filemgr.fileExistsAtPath(databasePath as String) { 
     if filemgr.copyItemAtPath(currentPath as String, toPath: databasePath as String, error: &fileCopyError) { 
      println("Copy successful") 
     } else { 
      println("Copy failed with error: \(fileCopyError!.localizedDescription)") 
     } 
    } else {println("The database is already there")} 

    let delegate = SharedReusableTableViewDelegate() 
    delegate.databasePath = databasePath as String 
    verseView.delegate = delegate 
    verseView.dataSource = delegate 
} 
} 

Я загрузки содержимого ячеек из SQLite базы данных (которые я уже тестировал).

Любые советы?
Спасибо,
S

+0

Есть ли определенная причина, по которой вы хотите, чтобы табличное представление находилось в других представлениях, а не только рядом с ними? – dudeman

+0

В каждом представлении таблицы в представлении отображается различный контент. Содержимое из одного табличного представления будет использоваться для пересылки содержимого другого. Каждый вид таблицы в каждом представлении должен отображаться в любое время. – silvoc

+0

Похоже, вы хотите видеть таблицы внутри одного и того же viewController, но не обязательно одного и того же вида.Сохранение функциональности вашего контроллера отдельно от ваших представлений »(и ваша модель в этом отношении) очень полезна в долгосрочной перспективе. – dudeman

ответ

0

Создать класс, который будет источником данных/делегат для общих взглядов таблицы:

class SharedReusableTableViewDelegate:UITableViewDelegate,UITableViewDataSource { 

    //put below all the delegate/data source functions 

} 

Все, что вам нужно сделать, это создать IBOutlet с до ваших таблиц контроллеры вид, в котором вы их, а затем в viewDidLoad добавить следующее:

let delegate = SharedReusableTableViewDelegate() 
mySharedTableView.delegate = delegate 
mySharedTableView.dataSource = delegate 

и это все.

С помощью этой установки вы отделяете логику, которая заполняет таблицы из логики, которая их рисует. Вы должны создать свой дизайн пользовательского интерфейса для каждой сцены диспетчера представлений, а затем вам просто нужно назначить для каждой повторно используемой таблицы представление правильного делегата. И этот делегат содержит весь код в одном файле.

Я думал, что это то, чего вы хотели достичь. Если нет, можете ли вы прояснить, что именно вы хотели бы достичь?

+0

Кажется вполне разумным, но я просто понимаю, как я любитель ... Посмотрим, понял ли я: чтобы проверить это, я создам 2 представления, каждый со своим собственным контроллером (каждый с классом UIViewController). Я поставлю IBOutlets для представлений таблиц в этих контроллерах вместе с лимитированными вами строками делегатов. В то же время я подготовлю SharedReusableTableViewDelegate со всеми подробностями, чтобы нарисовать таблицу. Это должно сделать представление таблицы в обоих представлениях идентичными (одинаковое содержимое и синхронизироваться в любое время). – silvoc

Смежные вопросы