2015-03-04 3 views
21

Non riesco a trovare un modo per abilitare accuratamente lo scorrimento orizzontale e verticale a livello di codice con Swift (i miei oggetti sono programmatici rendendo così impossibile l'uso del layout automatico in IB).UIScrollView a livello di codice in Swift

Il tutorial che ho seguito consente di scorrere entrambi i modi come previsto. Il problema è che il mio pulsante rimane nello stesso punto che occupa parte dello schermo indipendentemente da dove scorri. Ho avuto lo stesso risultato con un altro tutorial e sono abbastanza confuso sul perché questo sta accadendo.

Non sono stato in grado di trovare una risposta a questo quindi presumo che alcuni altri troveranno questo utile.

Ecco il codice che ho. Ho fatto un progetto molto semplice sulla base di questo tutorial: http://koreyhinton.com/blog/uiscrollview-crud.html

import UIKit 

class ViewController: UIViewController, UIScrollViewDelegate { 


    var scrollView: UIScrollView! 
    var containerView = UIView() 



    override func viewDidLoad() { 
     super.viewDidLoad() 

    let buttonOne = UIButton.buttonWithType(UIButtonType.System) as UIButton 


     buttonOne.frame = CGRectMake(10, 50, 50, 50) 
     buttonOne.backgroundColor = UIColor.greenColor() 
     buttonOne.setTitle("test", forState: UIControlState.Normal) 
     buttonOne.addTarget(self, action: "buttonAction1x1:", forControlEvents: UIControlEvents.TouchUpInside) 

     self.scrollView = UIScrollView() 
     self.scrollView.delegate = self 
     self.scrollView.contentSize = CGSizeMake(1000, 1000) 

     containerView = UIView() 


     scrollView.addSubview(containerView) 
     view.addSubview(scrollView) 
     self.view.addSubview(buttonOne) 


    } 

    override func viewDidLayoutSubviews() { 
     super.viewDidLayoutSubviews() 

     scrollView.frame = view.bounds 
     containerView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height) 
    } 



    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 


} 
+0

Prova pulsante Aggiungi per ScrollView o containerView –

risposta

9

Il codice è perfettamente funzionante, ma c'è un piccolo problema ad aggiungere buttonOne sulla vista.

È stato aggiunto buttonOne su self.view (cioè sottoview di self.view), non containerView che si trova su scrollView.

è necessario utilizzare il seguente codice

containerView.addSubview(buttonOne) 

invece di

self.view.addSubview(buttonOne) 
+0

che rende così tanto senso ancora non mi sarebbe mai venuto in mente. Grazie! – user3246092

3

Così si dovrebbe utilizzare seguente riga

containerView.userInteractionEnabled = true