2016-06-28 2 views
0

나는 selector 메소드가 인자를 포함 할 수 없다는 것을 이해하지만, 지금 내가하고 싶은 일에 어떻게 가야 하는지를 놓치고있다.이미지 탭에서 매개 변수가있는 메서드를 호출하는 방법은 무엇입니까?

내 목표는 5 개의 UI 이미지 뷰를 가지며 각 이미지 뷰에는 별 이미지가 있습니다. 이미지가 탭되면, 별은 이미지를 회색 또는 파란색으로 바꿔야합니다.

내 질문은 탭 한 스타에 따라 별 이미지 변경을 처리하는 방법 하나만 작성하는 것입니다. 이상적으로는, 가능하지 않다는 것을 알고 있지만 이미지를 메소드의 인수로 보내고 싶습니다. 이 문제를 해결할 수있는 유일한 방법은 5 개의 별 각각에 대해 메서드를 작성하는 것이지만 코드가 동일하므로 더 좋은 방법이 있어야한다고 생각합니다. 보기에

는 부하 않았다

// add tap recognition to rating stars 
    let tapGestureRecognizerOne = UITapGestureRecognizer(target:self, action:#selector(self.changeStar)) 
    starOneEditImage.userInteractionEnabled = true 
    starOneEditImage.addGestureRecognizer(tapGestureRecognizerOne) 
    let tapGestureRecognizerTwo = UITapGestureRecognizer(target:self, action:#selector(self.changeStar)) 
    starTwoEditImage.userInteractionEnabled = true 
    starTwoEditImage.addGestureRecognizer(tapGestureRecognizerTwo) 
    let tapGestureRecognizerThree = UITapGestureRecognizer(target:self, action:#selector(self.changeStar)) 
    starThreeEditImage.userInteractionEnabled = true 
    starThreeEditImage.addGestureRecognizer(tapGestureRecognizerThree) 
    let tapGestureRecognizerFour = UITapGestureRecognizer(target:self, action:#selector(self.changeStar)) 
    starFourEditImage.userInteractionEnabled = true 
    starFourEditImage.addGestureRecognizer(tapGestureRecognizerFour) 
    let tapGestureRecognizerFive = UITapGestureRecognizer(target:self, action:#selector(self.changeStar)) 
    starFiveEditImage.userInteractionEnabled = true 
    starFiveEditImage.addGestureRecognizer(tapGestureRecognizerFive) 

을 그리고 방법은 이미지의 탭에 전화 :

func changeStar() { 

     print ("star tapped") 

    } 

답변

1

내가 선택 방법은 인수

을 포함 할 수 없습니다 이해

잘못된 점을 이해하셨습니다. changeStar의 매개 변수는 제스처 인식기입니다. 제스처 인식기는 view이며 원하는 이미지 뷰입니다.

func changeStar(g:UIGestureRecognizer) { 
    let v = g.view as! UIImageView 
    // ... 
} 
+0

이것은 완벽하게 작동합니다. 감사합니다. 당신은 너무 빨리 대답해서 다른 9 분 동안 대답을 받아 들일 수 없으므로 돌아와서해야 할 것입니다. – Christie

관련 문제