从ViewControllers自定义TableView单元共享相同的自定义单元类?

时间:2016-12-07 05:02:07

标签: ios uitableview swift3

我想,如果有一种更清晰的方式来定制原型单元格而不是我现在正在做的事情,因为我感觉好像我没有编写干净,高效的代码。目前我有VC1可以转换为VC2,并且两者共享相同的自定义单元类以自定义我的tableview单元格。

CustomCell:

class CustomCell: UITableViewCell
{
    // VC1
    @IBOutlet var someImageView: UIImageView!
    @IBOutlet var someLabel: UILabel!

    // VC2
    @IBOutlet var otherImageView: UIImageView!
    @IBOutlet var otherLabel: UILabel!

    ....

    customizeCellsByScreenSize()
    {
        if screen size is iPhone 5
            if someImageView != nil && someLabel != nil
            {
                // We are in VC1, customize cells
            }
            else if otherImageView != nil && otherLabel != nil
            {
                // We are in VC2, customize cells
            }

        if screen size is iPhone 6
            // Do the same check as above

        if screen size is iPhone 6 Plus
           // DO same check as above
    }
}

VC1:

class VC1: UIViewController
{
    @IBOutlet var someImageView: UIImageView!
    @IBOutlet var someLabel: UILabel!

    ...

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        ...

        let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell

        ...

    }
}

VC2:

class VC2: UIViewController
{
    @IBOutlet var otherImageView: UIImageView!
    @IBOutlet var otherLabel: UILabel!

    ...

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        ...

        let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell

        ...

    }
}

CustomCell课程中,我先检查一下iPhone的屏幕大小,然后根据它自定义单元格,但是为了确保如果我不在VC1而不是VC2,我就不会得到一个零,我在自定义单元格之前,必须先检查IBOutlets是否为零,以确定我所在的ViewController

每次检查都会变得相当重复和混乱,我希望实现更好的方法。

我知道我可以使用协议并让VC1和VC2符合它,然后添加IBOutlets的标准蓝图命名约定,但是这是一个理想的协议吗?

或者是否有更好的替代方法可以让我的代码更清洁?

2 个答案:

答案 0 :(得分:0)

enum TypeOfViewController {
    case vc1
    case vc2
}
class CustomCell: UITableViewCell
{

@IBOutlet weak var someImageView: UIImageView!
@IBOutlet weak var someLabel: UILabel!
var vcType: TypeOfViewController!


    func customizeCellsByViewController()
    { 
         switch vcType {
              case vc1:
              // do things that concern VC1
              case vc2:
              // do things that concern VC2
         }


    }
 func customizeCellsBySize() {
       if screen size is iPhone 5
        //DO things that concern size

       if screen size is iPhone 6
        // DO things that concern size

       if screen size is iPhone 6 Plus
        // DO things that concern size
    }
}

虽然我强烈建议使用autolayout来设置表格视图单元格的高度。你可以找到一个好的教程here

答案 1 :(得分:0)

UITableView本身支持UITableViewCell调整大小功能。即使是Apple也很容易让你自己做难题。

https://www.hackingwithswift.com/read/32/2/automatically-resizing-uitableviewcells-with-dynamic-type-and-nsattributedstring

否则,为每个VC使用不同的自定义单元格