ios - 如何在 UITableViewController 中引用自定义 UIView 的 subview 按钮

标签 ios swift uitableview uiview

我正面临重用 UITableViewCell 的问题,我收到了让 UIButton 的操作发生在 UITableViewController 中的建议。 问题是因为 UIButton 是在自定义 UIView 子类中实例化的,所以我找不到引用它的方法。

代码是:

class StarButton: UIView {

var buttonRow : Int = 0
var buttonSelected : Bool = false

override init (frame : CGRect)
{
    super.init(frame : frame)
    initStar()
}

required init?(coder aDecoder: NSCoder){
    super.init(coder: aDecoder)
    initStar()
}

func initStar(){

    let filledStarImage = UIImage(named: "filledStar")
    let emptyStarImage = UIImage(named: "emptyStar")

    let button = UIButton(frame: CGRect(x: 2, y: 2, width: 33, height: 33))

    button.userInteractionEnabled = true
    button.addTarget(self, action: #selector(StarButton.fillingStar(_:)), forControlEvents: UIControlEvents.TouchUpInside)

    button.setImage(emptyStarImage, forState: .Normal)
    button.setImage(filledStarImage, forState: .Selected)

    if buttonSelected == true{
        button.selected = true
    }

    addSubview(button)
}

//Could have various errors
func fillingStar(sender: UIButton){
    if (sender.selected) == false{
        FavoritesManager.favoritesList.setObject(ChemQuizCollection.wordListObject.quizList[buttonRow], forKey: "\(buttonRow)")
        sender.selected = !sender.selected
        FavoritesManager.favoritesList.synchronize()
    } else{
        FavoritesManager.favoritesList.removeObjectForKey("\(buttonRow)")
        sender.selected = !sender.selected
        FavoritesManager.favoritesList.synchronize()
    }

}

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
{
    for view in subviews
    {
        view.touchesBegan(touches, withEvent: event)
    }
}

override func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool
{
    return true
}

这是自定义的 UIView 子类。我想引用 func initStar() 中的“按钮”。 使用 对于实例化的StarButton.subviews中的 subview { subview.selected = true } 抛出一个错误,指出 UIView 没有成员“已选择”。有没有更好的办法?

提前谢谢大家。

最佳答案

问题出在你的代码上

StarButton.subviews{ subview.selected = true }

.subviewsUIView 而不是 UIButton:UIView 没有 .selected属性

应该做的是遵循代码或类似的东西。您必须将游览 UIView 转换到 UIButton

let filtured  =  instantiatedStarButton.subviews.filter({
            if let button = $0 as? UIButton{
                return button.selected
            }
            return false
        })

关于ios - 如何在 UITableViewController 中引用自定义 UIView 的 subview 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39178317/

相关文章:

ios - Xcode 与 swift : Is it possible to show a view controller upon another without resetting the first?

ios - 在数组中查找 float

ios - 在 Objective-C 中序列化异步任务

ios - 转换实现协议(protocol)的 View Controller

ios - 在任意位置画圆

ios - SpriteKit 背景音乐不会永远循环

ios - 如何使 scrollView 像 Apple AppStore "Featured Page"一样?

ios - 点击 UITableView 单元格正在创建一个新单元格

objective-c - tableview 的问题

objective-c - 在缩放 UIScrollView subview 时保持恒定的线宽