2016-11-02 2 views
0

UICollectionViewCellUIButton이 있고 JSON에서 데이터를 가져옵니다. 이제 각 버튼에서 URL을 열어야합니다 (각 버튼에는 JSON에서 비롯된 다른 URL이 있습니다). CollectionViewCell의 UIButton URL 열기

나는 함께 URL을 열 관리 :

let weburl = "http://example.com" 
UIApplication.shared.openURL(URL(string: weburl)!) 

하지만 지금은 좀 각 버튼에 URL을 전달해야합니다. 이 아이디어를 어떻게 얻을 수 있을까요?

let urls = [url1, url2, ...] 

을 그리고 해당 URL의 인덱스에 각 버튼의 태그 속성을 할당합니다

+0

대리인을 사용해야합니다. 이 게시물을 확인하십시오 : http://stackoverflow.com/questions/24099230/delegates-in-swift – Eeshwar

답변

1

당신은 URL을의 배열을 가질 수 있습니다. 바로 셀 자체에 URL을 저장하는 것입니다

다른 솔루션

@IBAction func handleTouch(_ sender: UIButton) { 
    // assumes that the buttons' tags start at 0, which isn't a good idea. 
    // see @rmaddy comment bellow 
    let url = urls[sender.tag] 
    // use the version of the open method shown bellow because the other one becomes deprecated in iOS 10 
    UIApplication.shared.open(URL(string: url)!, options: [:], completionHandler: nil) 
} 

편집하고 단추 처리기에서의 셀에 해당하는 URL을 엽니 지금 당신은 쉽게 당신이 원하는 것을 관리 할 수 ​​있습니다.

let url = URL(string: "alexa://")! if #available(iOS 10, *) { UIApplication.shared.open(url, options: [:], completionHandler: { (success) in guard success else { //Error here } //Success here }) } else { if let success = UIApplication.shared.openURL(url) { //Success here } else { //Error here } } 

그렇지 않으면 단지 UIApplication.shared.open를 사용하면 이전 버전의 iOS를 지원해야하는 경우 참고의 OpenURL은 아이폰 OS 10에서 더 이상 사용되지 않습니다

+1

몇 가지 고려해야 할 사항. 여기서는 각 버튼의 태그를 0에서 n - 1로 설정한다고 가정합니다. 여기서 n은 버튼의 수입니다. 태그가 명시 적이지 않은 뷰의 경우 태그 0이 기본값입니다. 태그 값 0에 의존하는 것을 피하는 것이 가장 좋습니다. 더 중요한 것은 버튼의 태그를 사용하는 것이 위험하다는 것입니다. 콜렉션 뷰가 동적 인 경우 (셀 추가, 제거 또는 재정렬)와 같은 많은 경우에 실패합니다. – rmaddy

+0

@rmaddy 네, 맞습니다. 이 속성을 너무 많이 사용하는 것은 좋지 않지만 도움이되는 경우가 있습니다. 팁 주셔서 감사드립니다 "명시 적 태그가없는보기의 경우 0 태그가 기본값입니다. 태그 값 0을 사용하지 않는 것이 가장 좋습니다. 난 정말 버그를 피하는 데 도움이 –

+0

또 다른 해결책 : 왜 UIButton 하위 클래스를 만들고 속성 URL을 만들 수 없습니까? 그것을 각 URL과 함께 지정하십시오. –

0

나는 다음을 제안한다. 또한 당신이 tableViewCell에 전달하는 데이터 모델에 URL 필드를 추가하고 모델에서 URL을 찾아 보겠습니다.