如何将标签添加到UIStackView的特定arrangeSubView

时间:2015-10-30 15:31:24

标签: ios objective-c uitableview uistackview

我在swift中为#34; ViewController"提供了以下代码。 class ViewController:UIViewController,UITableViewDelegate,UITableViewDataSource {

@IBOutlet weak var imgTableView:UITableView!

let imgList = ["1.png", "2.png", "3.png" , "4.png"]

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.imgList.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("CellID", forIndexPath: indexPath) as? ImgTableViewCell

    cell?.coverImage.image = UIImage(named: imgList[0])

    for intValue in 1..<4
    {
        let stackViewImages = UIImageView()
        stackViewImages.image = UIImage(named: imgList[intValue])
        cell?.imgStackView.addArrangedSubview(stackViewImages)
    }

    return cell!

}

}

+++++++++++++++++++++++

类ImgTableViewCell:UITableViewCell {

@IBOutlet weak var coverImage:UIImageView!
@IBOutlet weak var imgStackView:UIStackView!

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

}

如何在stackview中的最后一张照片上添加标签。我尝试创建一个新标签,并通过在stackview内的imageview上调用addsubview以编程方式在stackview中添加它,但标签放置在单元格的最顶层。

2 个答案:

答案 0 :(得分:0)

由于您的UIStackView包含4个UIImageView。您可以使用UIStackView的index属性来访问其中的对象。 在StackView中插入对象的方式 -insertArrangedSubView:atIndex

StackView索引从0开始,作为Objective C中的其他容器对象。

您可以在堆栈视图中创建指向图像视图的指针,如下所示:

UIImageView * lastImageView = [stackView.subviews objectAtIndex:3];

您可以像这样访问它。

lastImageView.backgroundColor = [UIColor yellowColor];

现在添加任何其他子视图,例如.. UILabel ,假设您的标签名称是 titleTextLabel,而不是

[lastImageView addSubview:self.titleTextLabel];

答案 1 :(得分:0)

你有两种可能的方法来实现这一点(顺便说一句,我鼓励你像我一样简化你的代码): 1)只需将标签添加为最后一个堆栈视图视图,如下所示:

if let sv = cell?.imgStackView {

    for i in 1..<4 {
        let iv = UIImageView()
        iv = UIImage(named: imgList[i])
        sv.addArrangedSubview(iv)
    }

    let l = UILabel()
    l.text = "the last image"
    l.frame.size.width = cell?.imgStackView.frame.width
    l.numberOfLines = 0
    l.sizeToFit()
    sv.addArrangedSubview(t)
}

2)或者如果您需要将标签放在与最后一个图像相同的堆栈视图单元格中,请使用约束将其定位到您想要的位置,假设您希望图像视图下方有标签:

if let sv = cell?.imgStackView {
    let n = 3
    for i in 1...n {
        let iv = UIImageView()
        iv = UIImage(named: imgList[i])
        sv.addArrangedSubview(iv)

        // last image: add a label underneath the image view
        if i == n {
            let l = UILabel()
            l.text = "the last image"
            l.frame.size.width = cell?.imgStackView.frame.width
            l.numberOfLines = 0
            l.sizeToFit()
            // Add the bottom-top constraint
            iv.translatesAutoresizingMaskIntoConstraints = false
            iv.addConstraints([
                NSLayoutConstraint(item: l, attribute: .Top,   relatedBy: .Equal, toItem: iv, attribute: .Bottom, multiplier: 1, constant: 0),
            ])
        }
    }
}

希望有帮助(顺便说一句,我没有在Xcode中编译我的代码)。