2015-08-20 59 views
0

我想擁有多個視圖,每個視圖都包含2個表格視圖(每個視圖都有半個屏幕)。其中一個桌面視圖將由每個視圖共享。桌面瀏覽器會或多或少獨立運行。如何使用故事板設計更多共享桌面視圖的視圖

我想的兩個選項:

1),其中每當視圖進入取代共享的tableview重新加載獨立視圖。

2)由每個視圖(類似於在分割視圖控制器發生了什麼(雖然我不能使用SPLITVIEW作爲我想使用自適應佈局時,設備處於肖像模式)共享一個單一的tableview。

我有一種感覺,第二個方法是最好的,但我不能想辦法來設計它。 什麼是取得這一目標的最佳方式是什麼?

我試圖做所建議Andriy Gordiychuk(答案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)!") 
} 

} 

這裏是與表1的視圖控制器:

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數據庫(我已經測試過)。

有什麼建議嗎?
謝謝,
小號

+0

是否有一個特別的原因,你希望tableview在其他視圖而不是僅僅在他們旁邊? – dudeman

+0

視圖中的每個tableview將顯示不同的內容。來自一個tableview的內容將被用於回叫另一個的內容。每個視圖中的每個tableview都必須始終顯示。 – silvoc

+0

這聽起來像你想要在相同的viewController裏面的tableviews,但不一定是相同的視圖。長久以來,將控制器的功能與您的觀點分開(以及您的模型就此而言)非常有用。 – dudeman

回答

0

創建這將是您共享表視圖中的數據源/委託類:

class SharedReusableTableViewDelegate:UITableViewDelegate,UITableViewDataSource { 

    //put below all the delegate/data source functions 

} 

所有你現在要做的是創造IBOutlet s到你的表視圖控制器中你有他們,然後在viewDidLoad添加以下內容:

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

就是這樣。

通過這種設置,您可以將邏輯與填充表的邏輯分開。你必須爲每個視圖控制器場景創建你的UI設計,然後你只需要爲每個重用表視圖分配正確的委託。該委託包含一個文件中的所有代碼。

我認爲這是你想達到的。如果不是,你能否澄清你想達到的目標?

+0

這似乎很合理,但我只是意識到我是一個業餘愛好者...讓我們看看我是否理解:爲了測試這個,我將創建2個視圖,每個視圖都有自己的控制器(每個視圖都有一個UIViewController類)。我將把IBOutlets放在這些控制器中的表格視圖中,以及你寫的代表行。同時,我將準備帶有所有細節的SharedReusableTableViewDelegate以繪製表格。這應該使兩個視圖中的表格視圖相同(相同的內容並始終同步)。 – silvoc

相關問題