【问题标题】:Accessing to UIView contents of a UIScrollView in Swift在 Swift 中访问 UIScrollView 的 UIView 内容
【发布时间】:2016-01-25 15:45:54
【问题描述】:

我有一个创建滚动视图“personsScrollView”的函数。

@IBOutlet var personsScrollView: UIScrollView!
var personsScroll = UIView()
personsScroll = createPersonsScroll(CGSizeMake(60.0, 80.0), avatarCount: 10)

func createPersonsScroll(buttonSize:CGSize, avatarCount:Int) -> UIView {

    let padding = CGSizeMake(10, 10)
    let personButtonView = UIView()
    var buttonPosition = CGPointMake(padding.width * 0.5, padding.height)
    let buttonIncrement = buttonSize.width + padding.width

    personButtonView.frame.origin = CGPointMake(0,0)
    personButtonView.frame.size.width = (buttonSize.width + padding.width) * CGFloat(avatarCount+1)
    personButtonView.frame.size.height = (buttonSize.height +  2.0 * padding.height)

        for i in 0...(avatarCount-1)  {
            let button = UIButton(type: .Custom)
            button.tag = i
            button.frame.size = CGSize(width: 60, height: 55)
            button.frame.origin.x = buttonPosition.x
            button.imageView?.contentMode = UIViewContentMode.ScaleAspectFit
            button.setImage(UIImage(named: self.person[button.tag].avatar), forState: .Normal)
            button.addTarget(self, action: "addPersonSelected:", forControlEvents: .TouchUpInside)

            buttonPosition.x = buttonPosition.x + buttonIncrement

            let label = UILabel(frame: CGRectMake(0, 60, 60, 15))
            label.text = self.person[i].name

            button.addSubview(label)
            personButtonView.addSubview(button)
        }
    }

    personsScrollView.contentSize = personButtonView.frame.size
    personsScrollView.addSubview(personButtonView)

    return personButtonView
}

此函数创建一个 UIView“personButtonView”,它将包含 10 个 UIbuttons“按钮”,每个按钮都有不同的图像。 我的问题是,在代码之外,在 ViewDidLoad() 中,我如何访问例如第二个按钮的图像以仅替换该图像?或者如何访问第四个按钮的标签来改变它的文字?

感谢您的帮助! 提前致谢!

【问题讨论】:

    标签: swift uiview uiscrollview uiscrollviewdelegate


    【解决方案1】:

    查看此代码,正在创建视图和子视图的层次结构。如果您想要一种简洁的方式来访问这些内容,那么您可以简单地创建 UIView 子类来封装您的内容。

    为此,请将createPersonsScroll 中的代码重构为初始化程序。我可以看到正在创建的几个 UIButton 视图,因此您可以定义一个 AvatarButton 类来封装这些视图,并且可能还为其父级定义一个 PersonView 类,并使用一个属性来访问其内容。

    这个想法是你可以替换

    personsScroll = createPersonsScroll(buttonSize: CGSizeMake(60.0, 80.0), avatarCount: 10)
    

    例如:

    personView = PersonView(CGSizeMake(60.0, 80.0), avatarCount: 10)
    // ...
    personView.avatarButtons[2].image = myImage
    personView.avatarButtons[4].text = myString
    

    【讨论】:

    • 这是一个很好的答案,但是我想知道无需自定义类即可访问的方式
    • 我刚刚注意到我稍微误解了这个问题,你有几个按钮。答案是一样的:封装。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多