2014-11-15 3 views
0

동적 buttonAction 기능을 만드는 방법은 프로그래밍 방식 문제는이 버튼에 기능을 일치시키기 위해 내가 함수를 만들 필요가있다이는 MCQ 응용 프로그램에서 스위프트

func createNewButton(buttonName: String, xPosition: CGFloat, yPosition: CGFloat) -> UIButton { 
    let myButton = UIButton(frame: CGRectMake(0, 0, 50, 50)) 
    myButton.center = CGPoint(x: xPosition, y: yPosition) 
    myButton.setImage(UIImage(named: buttonName), forState: UIControlState.Normal) 
    myButton.addTarget(self, action: "buttonName:", forControlEvents: UIControlEvents.TouchUpInside) 
    return myButton 
}  

같은 여러 UIButton을 만들 수 있습니다. 이러한 기능은 실제로 배열에 문자열을 저장하려고하고 저장할 수있는 문자열은 함수 자체의 이름입니다

func buttonName(sender: UIButton!) { 
    // do some stuff 
}   

같은 기능은해야하므로 보인다. 예를 들어 buttonName: "blackberry"이면 코드는 "blackberry"이라는 이미지를 설정하고 "blackberry"이라는 대상 작업을 추가하므로 buttonAction 함수는 func blackberry(sender: UIButton)이고이 함수는 "blackberry"이라는 문자열을 String이라는 배열로 저장합니다.

그러나이 모든 것은 초기 buttonName: String 매개 변수의 기능으로 수행되어야합니다.

어쩌면 내가 실제로 올바른 일을하지 않고 어떻게해야합니까?

답변

2

어떨까요? 모든 버튼을 processButton(button: UIButton)으로 보내주십시오. 단추를 만들 때 각 단추에 고유 한 번호를 할당하는 tag 속성을 설정하십시오. 그런 다음 버튼 태그를 문자열로 변환하는 배열을 가질 수 있습니다.

var buttonNames: [String] = [] 
var currentIndex = 0 

func createNewButton(buttonName: String, xPosition: CGFloat, yPosition: CGFloat) -> UIButton { 
    let myButton = UIButton(frame: CGRectMake(0, 0, 50, 50)) 
    myButton.center = CGPoint(x: xPosition, y: yPosition) 
    myButton.setImage(UIImage(named: buttonName), forState: UIControlState.Normal) 
    myButton.addTarget(self, action: "processButton:", forControlEvents: UIControlEvents.TouchUpInside) 
    myButton.tag = currentIndex++ 
    self.buttonNames.append(buttonName) 
    return myButton 
} 

func processButton(button: UIButton) { 
    let string = buttonNames[button.tag] 
    // process string 
} 
+0

대단히 감사합니다. 아주 아름다운 솔루션! 처음에는'button.tag'은 항상'0'을 반환했지만 수동으로 각 버튼에 대한 태그를 설정하고 이제는 작동합니다! (이'.tag '매개 변수에 대해서는 알지 못했지만, 매우 편리합니다.) – magohamoth

+0

네, 편집 해 주셔서 감사합니다. 정확히 어떻게 했나요? – magohamoth