2014-06-14 27 views
10

Ich baue meine erste App für IOS und ich bin dabei, einen Weg zu finden, eine einfache ScrollView mit dem Swift-Code auf dem XCode6 zu machen. Kann mir bitte jemand helfen, die Lösung zu finden?Wie erstellt man eine ScrollView mit Swift?

Mein Problem ist, dass ich nicht weiß, wie die scrollview in meinem Code arbeiten. Ich habe den Code, wie unten in ViewController.swift gezeigt, bereits geputcht und ich hatte erwartet, dass ich den Outlet "Scroller" in der Main.storyboard für einen ViewController auswählen kann, stattdessen bekomme ich den Fehler *"fatal error: Can't unwrap Optional.None (lldb)"* EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0)

Ich habe einige ViewController Bildschirme und in einem davon habe ich ein ScrollView putted und ich möchte es mit dem Swift arbeiten lassen.

Ich bin auf diese stecken:

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

Ich denke, wenn jemand ein einfaches Beispiel zur Verfügung stellen kann, wie ein Scroll swift zu tun mit ihm mein Problem zu lösen. Jede Hilfe ist zu schätzen.

es in einem alten Stil zu tun versuchen, ich versuchte, es zu tun, um eine .m und .h-Datei mit:

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 

Prost

+0

Bitte weitere Beschreibung in Ihrer Frage geben. Sonst wird es als niedrige Qualität entfernt. –

+0

Hi T.S. Ich habe mehr Beschreibung hinzugefügt. Bitte lassen Sie mich wissen, wenn es genug ist. – Alex

+0

Sind Sie sicher, dass die Steckdose angeschlossen ist? Der Fehler weist darauf hin, dass Sie in einem implizit nicht ausgepackten optionalen Problem und nicht in einem bestimmten Bildlaufproblem einen None-Wert haben. – jrturton

Antwort

10

Lassen Sie uns dies eine Chance geben. Zu beachten ist, dass ich noch keine Möglichkeit gefunden habe, Self.view als UIScrollView abzustempeln, so dass Sie keine Aufrufe wie self.view.contentOffset vornehmen können.

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

} 
+2

Vielen Dank für den Schuss, aber ich denke es nicht für das, was ich versuche zu tun. – Alex

0

Ihre Steckdose ist nicht angeschlossen. Vom Swift with objective-C book:

When you declare an outlet in Swift, the compiler automatically converts the type to a weak implicitly unwrapped optional and assigns it an initial value of nil. In effect, the compiler replaces @IBOutlet var name: Type with @IBOutlet weak var name: Type! = nil

Wenn dieser Wert nicht verbunden war, würde es als null bleiben und Sie würden einen Laufzeitfehler erhalten, wenn der Wert zugreifen.

+0

Hallo Jrturton, das erklärt viel, warum ich Probleme habe. Ich glaube, ich habe dieses Buch schon. Danke für Anteil. ABER wie können wir den Code korrigieren, um den Ausgang zu haben? Muss ich eine Brücke mit .m (Objective C-Datei) machen? Ich habe den gleichen Code in einem ViewController.m und eine Referenz in der Bridge-Header-Datei. – Alex

+0

Es ist nichts falsch mit dem Code. Sie müssen sicherstellen, dass Sie die Steckdose im Interface Builder angeschlossen haben. Wählen Sie das View-Controller-Objekt und prüfen Sie, ob der Ausgang verbunden ist. – jrturton

+0

Wow, ok, das Problem ist genau das, wenn ich zum Interface Builder gehe und den View Controller auswähle und versuche, die Steckdose anzuschließen, erscheint der "Scroller" nicht – Alex

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

    } 
Verwandte Themen