Swift 4:在具有单独类的单元格上单击时,新的Viewcontroller

时间:2019-02-27 16:43:40

标签: ios swift uitableview

我有一个表视图,它具有自己的类以便可重复使用。我的问题是,现在我要添加:

class Carroussel extends StatefulWidget {
  @override
  _CarrousselState createState() => new _CarrousselState();
}

class _CarrousselState extends State<Carroussel> {
  PageController controller;
  int currentpage = 0;

  @override
  initState() {
    super.initState();
    controller = new PageController(
      initialPage: currentpage,
      keepPage: false,
      viewportFraction: 0.5,
    );
  }

  @override
  dispose() {
    controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Center(
        child: new Container(
          child: new PageView.builder(
              onPageChanged: (value) {
                setState(() {
                  currentpage = value;
                });
              },
              controller: controller,
              itemBuilder: (context, index) => builder(index)),
        ),
      ),
    );
  }

  builder(int index) {
    return new AnimatedBuilder(
      animation: controller,
      builder: (context, child) {
        double value = 1.0;
        if (pageController.position.haveDimensions) {
          value = controller.page - index;
          value = (1 - (value.abs() * .5)).clamp(0.0, 1.0);
        }

        return new Center(
          child: new SizedBox(
            height: Curves.easeOut.transform(value) * 300,
            width: Curves.easeOut.transform(value) * 250,
            child: child,
          ),
        );
      },
      child: new Container(
        margin: const EdgeInsets.all(8.0),
        color: index % 2 == 0 ? Colors.blue : Colors.red,
      ),
    );
  }
}

但是由于tableview有它自己的类,所以我不能自已就没有现成的方法。我也不想使用segue或navigationcontroller或其他任何东西,以便能够在任何地方使用此tableview。

1 个答案:

答案 0 :(得分:1)

如果您要使tableView成为其自己的委托,则必须添加自己的自定义委托,以将有关didSelectRowAt事件通知给演示者(在您的情况下为viewcontroller)。

赞:

protocol CustomTableViewDelegate: class {
    func customTableView(_ tableView: CustomTableView, didSelectRowAt indexPath: IndexPath)
}

class CustomTableView: UITableView, UITableViewDelegate {
    weak var customDelegate: CustomTableViewDelegate?
    //... other properties and UITableViewDelegate implementation
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        customDelegate?.customTableView(self, didSelectRowAt: indexPath)
    }
}

class SomeViewController: CustomTableViewDelegate {
    func customTableView(_ tableView: CustomTableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: false)
        let vc = UIStoryboard(name: "Main", bundle:nil).instantiateViewController(withIdentifier: "eventView") as! eventView 
        vc.event = self.eventsToLoad[indexPath.row]
        self.present(vc, animated: true, completion:nil)
    }
}