实现功能为:点击cell输入框,输入字符串,然后要获取保存已输入的字符串。这是一个tableview列表共显示有11个cell,点击输入填写金额cell,这个cell里面有一个UITextField控件,于是楼主想到利用UITextFieldDelegate的代理方法,在cell里通过代理方法获得输入的字符串,然后通过block在控制器里拿到字符串,最后通过赋值给已经定义的model替换掉初始化时数组里的model,通过indexPath.row来定位具体替换数组里那个model。
这么实现显然是没问题的,方便简洁,不需要重新定义数组,model,输入金额cell是用xib写的,直接拖控件,在xib里链接UITextField代理,在cell的.h文件里写上UITextFieldDelegate,声明bolck,通过- (void)textFieldDidEndEditing:(UITextField*)textField;代理方法获取输入字符串,用block传递给控制器,在控制器里保存到数组中;到这里就只是两个字:完美!
真的完美吗?可当楼主这么写完时,却发现根本获取不到字符串,为什么?一脸懵逼,,,
老办法,打断点,结果发现cell 里的block没运行,why?因为代理方法根本就没触发(block写在代理里),代理方法为嘛没触发,代理设置了,难道是代理方法有问题?显然没问题,,,百思不解,,,代理写了,也设置了,不应该啊,,,后面发现是cell里设置代理的问题,不能直接拖线设置,cell不是控制器,要用代码设置,self.trailLab.delegate=self;然后然后问题解决了,,,平常直接在xib里拖线设置代理,习惯了,一般是控制器里设置代理,在cell里设置代理不常见,所以才会出现那样的问题吧,,,
自己今天搬砖时遇到的一点小问题,记录下,分享给自己和大家~(可能理解的不一定正确,还希望遇到大神斧正~~~)