UITableView - 嵌入在自定义UITableViewCell类中的controls / IBActions

时间:2015-06-12 01:22:02

标签: ios uitableview

我希望将自定义/*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; CREATE DATABASE /*!32312 IF NOT EXISTS*/`a3823833_MiniPos` /*!40100 DEFAULT CHARACTER SET latin1 */; USE `a3823833_MiniPos`; /*Table structure for table `user` */ DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `userid` int(4) NOT NULL auto_increment, `username` varchar(20) NOT NULL, `password` varchar(20) NOT NULL, `email` varchar(50) NOT NULL, PRIMARY KEY (`userid`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*Table structure for table `profile` */ DROP TABLE IF EXISTS `profile`; CREATE TABLE `profile` ( `userid` int(4) NOT NULL, `lastName` varchar(50), `firstName` varchar(50), `dob` varchar(10), PRIMARY KEY (`userid`), CONSTRAINT `profile_fk` FOREIGN KEY (`userid`) REFERENCES `user` (`userid`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*Table structure for table 'topic'*/ DROP TABLE IF EXISTS `topic`; CREATE TABLE `topic` ( `topicid` int(4) NOT NULL auto_increment, `userid` int(4) NOT NULL, `text` varchar(2000), `time` datetime, PRIMARY KEY (`topicid`), CONSTRAINT `userid_fk` FOREIGN KEY (`userid`) REFERENCES `user` (`userid`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /* Table structure for table 'post'*/ DROP TABLE IF EXISTS `post`; CREATE TABLE `post` ( `postid` int(4) NOT NULL auto_increment, `topicid` int(4), `userid` int(4) NOT NULL, `text` varchar(2000), `time` datetime, PRIMARY KEY (`postid`), CONSTRAINT `post_userid_fk` FOREIGN KEY (`userid`) REFERENCES `user` (`userid`), CONSTRAINT `post_topicid_fk` FOREIGN KEY (`topicid`) REFERENCES `topic` (`topicid`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; LOCK TABLES `user` WRITE; INSERT INTO USER VALUES (1,'Martynas','MartynPass','Martyn@email.com'),(2,'Syed','SyedPass','Syed@email.com'),(3,'Stephanie','StephPass','Steph@email.com'); UNLOCK TABLES; LOCK TABLES `topic` WRITE; INSERT INTO topic VALUES (1, 1,'Topic Number 1','2015-06-11 20:15:00'),(2, 2,'Topic Number 2','2015-06-10 19:15:00'),(3, 3,'Topic Number 3','2015-06-09 18:15:00'); UNLOCK TABLES; LOCK TABLES `post` WRITE; INSERT INTO post VALUES (1, 1, 1, 'Very Interesting Topic Number 1','2015-06-11 20:15:00'),(2, 1, 2, 'Agree!','2015-06-11 21:15:00'); UNLOCK TABLES; 类的表作为行。在每一行(自定义UITableViewCell)中,我有一个控件,用户可以使用该控件来更改该行中某些内容的状态。

为了示例,我们假设每个表行(自定义UITableViewCell)包含一个按钮和一个标签,我希望点击该按钮来更改标签文本来自&#34活化的"到"停用"来来回回。

*注意**我理解,对于上述场景,我可以使用UITableViewCell方法来实现,但这对我的实际使用场景不起作用。我使用上面的场景是因为它更简单,并且包含了我需要的核心功能。

通常情况下,如果这不在didSelectRowAtIndexPath中,我会在UITableViewCell自定义类中添加IBAction按钮,并在标签上添加UIViewControllerIBOutlet方法会更改IBAction标签的文字。非常标准的东西。

但是如果将控件嵌入到表格行中,我就无法建立IBOutlet个连接。我尝试与IBAction以及IBAction建立UIViewController个关联,但它似乎不允许这样做。我该如何设置呢?在我看来,在界面设计中做一个非常有用的事情,所以我认为应该可以吗?

2 个答案:

答案 0 :(得分:0)

您可以在cellForRowAtIndexPath中设置按钮的操作,如下所示:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! YourCustomCell

    cell.button.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
    return cell
}

func buttonClicked(button: UIButton) {
    // get row index
    let index = self.tableView.indexPathsForRowsInRect(button.superview!.convertRect(button.frame, toView: self.tableView))
}

答案 1 :(得分:0)

首先,我可以控制 - 从UITableViewCell xib中的按钮拖动到我的头文件以创建IBAction。您只需选择从Outlet到Action的连接。

另一方面,您可以按代码指定按钮的操作。

如果您的按钮属于某个属性,请说出它的self.tableCellButton,添加以下操作:

dismissViewControllerAnimated:completion: