web-dev-qa-db-fra.com

Comment construire un ScrollView en utilisant Swift?

Je construis ma première application pour IOS et j'ai du mal à trouver un moyen de faire un simple ScrollView en utilisant le code Swift sur le XCode6. Quelqu'un peut-il m'aider à trouver la solution?

Mon problème est que je ne sais pas comment faire fonctionner le scrollview dans mon code. J'ai déjà mis le code comme vous pouvez le voir ci-dessous dans le ViewController.Swift et je m'attendais à pouvoir sélectionner le "défilement" de la prise dans le tableau principal pour un ViewController, au lieu de cela, je reçois l'erreur *"fatal error: Can't unwrap Optional.None (lldb)"* EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0)

J'ai quelques écrans ViewController et dans l'un de ceux-ci, j'ai mis un ScrollView et je veux que cela fonctionne avec le Swift.

Je suis coincé sur ceci:

import UIKit

class ViewController: UIViewController {

    @IBOutlet var scroller:UIScrollView

    override func viewDidLoad() {
        super.viewDidLoad()
        scroller.scrollEnabled = true;
        scroller.contentSize = CGSizeMake(320, 624);
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

Je pense que si quelqu'un peut fournir un exemple simple, comment faire un scrollview avec Swift, cela résoudra mon problème. Toute aide est appréciée.

En essayant de le faire dans un style ancien, j'ai essayé de le faire en utilisant un fichier .m et .h:

ViewController.m

#import "Amigo-Bridging-Header.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    [scroller setScrollEnabled:YES];
    [scroller setContentSize:CGSizeMake(320, 624)];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

Amigo-Bridging-Header.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {
    IBOutlet UIScrollView *scroller;
}
@end

À votre santé

10
Alex

Donnons ceci un coup de feu. La seule chose à noter est que je n'ai pas encore trouvé le moyen de baisser l'auto-visualisation en tant qu'UIScrollView, de sorte que vous ne pouvez pas effectuer d'appels tels que self.view.contentOffset.

import UIKit

class ScrollingViewController : UIViewController {
    // Create a scrollView property that we'll set as our view in -loadView
    let scrollView = UIScrollView(frame: UIScreen.mainScreen().bounds)

    override func loadView() {
        // calling self.view later on will return a UIView!, but we can simply call 
        // self.scrollView to adjust properties of the scroll view:
        self.view = self.scrollView

        // setup the scroll view
        self.scrollView.contentSize = CGSize(width:1234, height: 5678)
        // etc...
    }

    func example() {
        let sampleSubView = UIView()
        self.view.addSubview(sampleSubView) // adds to the scroll view

        // cannot do this:
        // self.view.contentOffset = CGPoint(x: 10, y: 20)
        // so instead we do this:
        self.scrollView.contentOffset = CGPoint(x: 10, y: 20)
    }

}
10
Ryan

Votre sortie n'est pas connectée. Extrait du livre Swift with objective-C:

Lorsque vous déclarez une prise dans Swift, le compilateur convertit automatiquement le type en un faible optiquement implicitement non enveloppé et lui attribue une valeur initiale de nil. En effet, le compilateur remplace @IBOutlet var name: Type par @IBOutlet weak var name: Type! = nil

Si cette valeur n'était pas connectée, elle resterait égale à zéro et vous obtiendriez une erreur d'exécution lors de l'accès à la valeur.

0
jrturton
 @IBOutlet weak var scrollView: UIScrollView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        // setup the scroll view
        self.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 200, 0);

    }
0
Vinod Joshi