我有一个表视图,它具有自己的类以便可重复使用。我的问题是,现在我要添加:
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。
答案 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)
}
}