如何在按钮单击时将ImageView添加到表格单元格中?

时间:2017-02-02 13:42:03

标签: ios swift xcode uitableview uiimageview

我正在尝试做这样的事情:

enter image description here

当用户点击“添加页面”时,会在其下方显示新的分组。现在,我决定使用Table View单元格来实现这一目标。在按照各种教程并查找类似的Q& As之后,我可以使用UILabel按钮单击添加单元格,并根据内容使单元格高度动态,但现在我想弄清楚如何添加ImageViews并在其中放置按钮一个细胞。

我已经创建了一个自定义单元格类:

class PageCell : UITableViewCell {

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        self.selectionStyle = UITableViewCellSelectionStyle.none

        setupViews()
    }

    ...
    ... // other random code here


    let imgView : UIImageView = {
        let imgview = UIImageView()
        imgview.frame = CGRect(x: 100, y: 150, width: 150, height: 140)
        imgview.tintColor = UIColor(red: 0.73, green: 0.2, blue: 0.3, alpha: 1.0)
        imgview.translatesAutoresizingMaskIntoConstraints = false
        return imgview
    }()

    func setupViews() {
        addSubview(pageLabel) // the label that I got working
        addSubview(imgView) // can't get this working
        ...
        // constraint info here
    }
}

回到我的TableViewController:

class TakePhotosVC: UITableViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.register(PageCell.self, forCellReuseIdentifier: "cellID")
    }

    // return the actual view for the cell
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let pagecell = tableView.dequeueReusableCell(withIdentifier: "cellID", for: indexPath) as! PageCell
        // set more stuff here
    }

    ... // more code
} 

我的问题是,我正在尝试显示一个框,显示用户可以单击以加载图片的ImageView。我不确定如何做到这一点并放置所有相关按钮(垃圾,X等)

非常感谢任何帮助。

修改

好的,我试图关注this教程,但我无法完成它。在我的原型单元格中,我看到了:

enter image description here

但结果如下:

enter image description here

我让UIImageView有一个背景,所以我可以看到它。我有UIImageView的两个约束:width = 240,height = 128和Page Label的两个约束:width = 240,height = 21.两个问题:为什么我的元素没有即使我把它正确地放在故事板中,也能正确放置?为什么单元格高度不能动态调整大小以容纳元素?

我在viewDidLoad的{​​{1}}方法中有这两行,但它似乎没有做任何事情。

TakePhotosVC

如果相关,我在运行模拟器时会收到此警告。

  

仅警告一次:检测到模糊限制的情况   建议tableview单元格的内容视图的高度为零。我们   考虑到无意识的崩溃和使用标准高度   代替。

编辑2

我得到了它的工作。对于在我之后阅读此内容的任何可怜的灵魂,您必须在Constraints窗口编辑器中单击那些虚线粉红色的线条,然后单击“添加X约束”以使ImageView居中和填充。

2 个答案:

答案 0 :(得分:0)

  

我的问题是我试图让一个框显示ImageView的位置   是用户可以点击加载图片。我不确定如何   这样做并放置所有相关按钮(垃圾桶,X等)

我不确定我是否理解正确。你有一个带有UIImageView的单元格。但是你想要显示一个方框来直观地指出用户应该触摸的位置来添加UIImage(?)

为什么不简单地在UIImageView的顶部添加UIButton,并使用完全相同的帧大小,然后在触摸时触发动作以添加图像,一旦成功添加图像,就可以将UIButton设置为隐藏。

如果用户使用垃圾按钮删除图像,则只需隐藏= NO再次显示UIButton。

其他解决方案: 使用自定义颜色向UIImageView添加边框,并添加UITapGestureRecognizer以触发操作。 (确保将UIImageView设置为userInteractionEnabled = YES;

当没有图像集时,您可以使用自定义设计将占位符图像添加到UIImageView。

答案 1 :(得分:0)

最简单的方法是使用xib而不是以编程方式放置按钮。为此,请添加新文件并选择xib。在xib中,您可以使用图像视图预先制作一个tableviewcell,并且您已经为约束放置了按钮。然后,您可以子类化此表视图单元格并将图像视图和按钮与ib outlet和ib操作连接,以访问按钮和图像视图。然后,在你的cellForRow函数中,像这样加载xib:

Bundle.main.loadNibNamed("NameOfNib", owner: self, options: nil).first as! NameOfSubclass

我建议在xibs和笔尖上阅读更多内容。