2016-07-07 3 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; 
    } 
} 

Ich kann UIScrollView scrollen, es funktioniert.Aber ich rufe aus einer anderen Ansicht, es funktioniert nicht.Wie rufe ich ein ContentOffset aus einer anderen Ansicht in Swift auf?

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); 

    } 
} 

I Breakpoint haben, haben beide func scrollToContentOffsetX gehen (offsetX: CGFloat). , die mir und sry für mein Englisch

+0

Was ist 'LogInViewController'? Ist dir aufgefallen, dass du eine neue Instanz davon erstellst? –

+0

mein Tippfehler, ich reparierte es, thx. – KennC

Antwort

2

Problem in Ihrem Code darauf durch @ AminNegm-Awad helfen kann: in btnForget_Click Sie völlig neue Instanz von oneViewController erstellen, die nie auf dem Bildschirm angezeigt und haben keine Verbindung oneViewController bestanden. Sie müssen einen Zeiger auf Ihre existierende Instanz oneViewController in Ihrer anthorView Instanz haben. Üblicher Weg, um mit dem Controller zu "sprechen", ist der Protokolldelegierter. Lies selbst darüber; hier werde ich eine andere Lösung mit Schließung anbieten. Wie auch immer, Sie müssen Zeiger auf Ihre anthorView Instanz haben (lassen Sie es als anthorViewInstance Eigenschaft deklarieren) in oneViewController. Hier Änderungen ist, dass Sie Ihre Klassen müssen hinzufügen

Klasse anthorView:

var offsetClosure: (CGFloat ->())? 

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

Klasse 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) 
     }  
} 

Außerdem gibt es lokale Fall für diese Lösung kann in Ihrem Fall durchgeführt werden. Sie können die Tastenaktion anthorView direkt vom View-Controller aus einstellen. Für tun, um diese declare Taste als Eigentum in anthorView

Klasse 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 

Klasse 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

danke, ich denke, ich brauche Schließung besser für mich zu lernen. – KennC

Verwandte Themen