2016-07-07 5 views
3
class oneViewController: UIViewController{ 
    let sv = UIScrollView(); 
    override func viewDidLoad() { 
    super.viewDidLoad(); 

    sv.frame = CGRectMake(0, 100, screenWidth, screenHeight); 
    sv.backgroundColor = UIColor.clearColor(); 
    sv.contentSize = CGSize(width: sv.frame.size.width*3 ,height: sv.frame.size.height); 
    sv.delegate = self; 
    scrollToContentOffsetX(screenWidth); 
    self.view.addSubview(sv); 
    } 


    func scrollToContentOffsetX(offsetX:CGFloat) { 

     sv.contentOffset.x = offsetX; 
    } 
} 

UIScrollView를 스크롤 할 수 있습니다.하지만 다른보기에서 호출합니다. 작동하지 않습니다. Swift에서 다른보기에서 contentOffset을 호출하려면 어떻게해야합니까?

class anthorView: UIView{ 

    override init (frame : CGRect) 
    { 

    super.init(frame : frame) 

     let btnForget = UIButton(frame: CGRectMake(screenWidth-155, txtPWD.frame.origin.y+txtPWD.frame.size.height+5, 70, 30)); 
     btnForget.setTitle("Forget", forState: UIControlState.Normal); 
     btnForget.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal); 
     btnForget.addTarget(self, action: #selector(btnForget_Click), forControlEvents: .TouchUpInside); 
     btnForget.titleLabel!.font = UIFont.systemFontOfSize(14); 
     btnForget.backgroundColor = UIColor.clearColor(); 
     self.addSubview(btnForget); 
    } 

func btnForget_Click(sender: AnyObject) { 

    oneViewController().scrollToContentOffsetX(0); 

    } 
} 

내가 중단 점을

, 모두 scrollToContentOffsetX (: CGFloat offsetX) FUNC 이동합니다. @ AminNegm - 아 와드가 가리키는 코드에서 내 영어

+0

'LogInViewController' 무엇입니까? 당신이 새로운 인스턴스를 생성한다는 것을 알고 있습니까? –

+0

내 오타가있다. 나는 그것을 고쳤다. – KennC

답변

2

문제에 대해 저와 SRY 도움을 줄 수 : btnForget_Click에 더 연결을 화면에 표시하지 않습니다 oneViewController의 완전히 새로운 인스턴스를 생성하지 않고있다가 oneViewController를 존재합니다. anthorView 인스턴스에 존재하는 oneViewController 인스턴스에 대한 포인터가 있어야합니다. 컨트롤러와 "대화"하기위한 뷰의 일반적인 방법은 프로토콜 위임입니다. 혼자서 그것에 대해 읽어보십시오. 여기서 나는 다른 해결책을 제시 할 것이다. 어쨌든 anthorView 인스턴스 (anthorViewInstance 속성으로 선언하도록 함)에 대한 포인터가 oneViewController에 있어야합니다.

var offsetClosure: (CGFloat ->())? 

func btnForget_Click(sender: AnyObject) { 
    // delete previous implementation 
    offsetClosure?(0) 
} 

클래스 oneViewController : 다음은 클래스에 추가

클래스 anthorView 필요 변화이다 또한

var anthorViewInstance: anthorView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // some your code... 

    // next line is initialization of anthorView, do it in other place if you wish 
    anthorViewInstance = anthorView(frame: CGRectZero) 
    anthorViewInstance.offsetClosure = 
     { 
      [weak self] 
      offsetX in 
      self?.scrollToContentOffsetX(offsetX) 
     }  
} 

를이 솔루션에 대한 지역의 경우가있다 귀하의 경우에 수행 할 수 있습니다. 뷰 컨트롤러에서 anthorView의 버튼 동작을 직접 설정할 수 있습니다. 대한 anthorView

클래스 anthorView에 속성으로이 선언 버튼을 수행

var btnForget: UIButton! 

super.init(frame : frame) { 
    btnForget = UIButton(frame: CGRectMake(screenWidth-155, txtPWD.frame.origin.y+txtPWD.frame.size.height+5, 70, 30)) 

    // ... other init code 

    // remove btnForget.addTarget line 
} 

// move btnForget_Click method to view controller 

클래스 oneViewController을 :

var anthorViewInstance: anthorView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // some your code... 

    // next line is initialization of anthorView, do it in other place if you wish 
    anthorViewInstance = anthorView(frame: CGRectZero) 
    anthorViewInstance.btnForget.addTarget(self, action: #selector(btnForget_Click), forControlEvents: .TouchUpInside) 
} 

func btnForget_Click() { 
    scrollToContentOffsetX(0) 
} 
+1

고마워요, 제 생각 엔 저에게 더 나은 결론을 얻을 필요가 있다고 생각합니다. – KennC

관련 문제