2016-01-25 5 views
1

У меня есть функция, которая создает scrollview «personScrollView».Доступ к содержимому UIView UIScrollView в Swift

@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(), как мне получить доступ, например, к изображению второй кнопки, чтобы заменить только это изображение? Или как получить доступ к метке 4-й кнопки, чтобы изменить ее текст?

Буду признателен за вашу помощь! Спасибо заранее!

ответ

0

Глядя на этот код, создается иерархия представлений и подразделений. Если вам нужен чистый способ доступа к ним, вы можете просто создать подклассы 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 
+0

Это хороший ответ, однако мне было интересно, как получить доступ без необходимости делать пользовательский класс – Ruben

+0

I просто заметил, что я неправильно понял вопрос, у вас есть несколько кнопок. Ответ один и тот же: инкапсуляция. – Clafou

+0

Я отредактировал ответ, надеюсь, что он поможет – Clafou

Смежные вопросы