我想在ios中使用相同的UserInterface和不同的Data

时间:2016-08-04 13:41:08

标签: ios iphone swift2

我在25 tabs中有UITabBarController,每个标签显示一个tableview,其中包含不同的数据。我可以在所有选项卡中使用相同的tableview和不同的数据。剩余底部显示的4个标签将显示更多。

P.S。 :我正在快速编码。

3 个答案:

答案 0 :(得分:2)

是的,你当然可以。只需实例化视图控制器的新实例,将其连接到数据源并委派并呈现它。

标签栏控制器中的25个标签是疯了。您需要重新考虑您的用户界面。

答案 1 :(得分:0)

是的,你可以。

您可以使用开关检测所选的标签栏项目索引,然后您可以根据需要分配数据源。

  func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        //suppose index is your tab Bar item index
        switch index {
        case 0:
           return YOUR_DATA_ARRAY1.count
        case 1:
            return YOUR_DATA_ARRAY2.count
            .
            .
            .
        case 25:
            return YOUR_DATA_ARRAY25.count
        default:
            break
        }
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("YourCellIdentifier", forIndexPath: indexPath)

        //You can use same switch here to access objects from your data array and use it to assign values for cell
        return cell;
    }

SIDE NOTE :实际上您的方法是错误的,因为您的数据非常大。您仍然可以使用此方法,但我强烈建议您重新考虑它。

答案 2 :(得分:0)

是的,你可以。我的建议是创建一个带有tableView的基本ViewController,并扩展连接到选项卡的每个ViewControllers。然后所有连接的视图控制器应该根据需要更改数据数组。

所以,假设您有一个基本的ViewController名称BaseViewController.swift。在该控制器中,您有一个名为dataSource的数组,如 -

var dataSource = [String]()

然后在协议列表中添加所需的委托和数据源,如 -

class BaseViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 

现在就在你之后添加你的tableview。

 var myTableView: UITableView!

现在在viewDidLoad方法中,添加你的表。

    override func viewDidLoad() {
        super.viewDidLoad()

        self.myTableView = UITableView.init(frame: self.view.bounds)
        self.myTableView.delegate! = self
        self.myTableView.dataSource! = self
        self.view.addSubview(self.myTableView)
    }

现在只需实现数据源方法。

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{
    return self.dataSource.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{
        let cell = tableView.dequeueReusableCellWithIdentifier("myTableViewCell", forIndexPath: indexPath)
        cell.textLabel.text = self.dataSource[indexPath.row] //assuming you only have a string in your array
        return cell;
}

现在你需要做的就是扩展这个类。假设您的第一个Tab与ViewControllerA.swift对应。

所以,就像这样延伸 -

class ViewControllerA: BaseViewController

然后在viewDidLoad方法中,将数据数组指定为dataSource数组。

因此,假设第一个控制器将显示数组名称dataA。

因此,您只需在viewDidLoad方法中执行此操作,

self.dataSource = dataA

如果您的dataSource需要显示复杂数据(如带有图像,标题或多个标签的类对象),您可以覆盖该特定类中的cellForRowAtIndexPath。这样,它会影响其他控制器。

希望这有帮助。