2016-07-07 19 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,它working.But我從另一個查看調用,它不工作。如何從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); 

    } 
} 

我有斷點,都去func scrollToContentOffsetX(offsetX:CGFloat)。誰可以幫我和SRY我在你的代碼英文

+0

什麼是'LogInViewController'?你是否意識到你創建了一個新的實例? –

+0

我的錯字,我修好了,thx。 – KennC

回答

2

問題通過@ AminNegm - 阿瓦德指出 :在btnForget_Click您創建的oneViewController,這將永遠不會出現在屏幕上完全新的實例,並沒有連接存在oneViewController。您需要在anthorView實例中指向您現有的oneViewController實例。與控制器「交談」的常見方式是協議委託。自己閱讀;在這裏我將提供另一個關閉解決方案。無論如何,您需要在oneViewController中指向您的anthorView實例(讓它聲明爲anthorViewInstance屬性)。下面是你需要添加到您的類

類anthorView變化:

var offsetClosure: (CGFloat ->())? 

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

類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.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

相關問題