2014-06-14 14 views
10

IOS için ilk Uygulamamı yapıyorum ve XCode6'daki Swift kodunu kullanarak basit bir ScrollView yapmanın bir yolunu bulmak için uğraşıyorum, lütfen bir çözüm bulmam için bana yardımcı olabilir misiniz?Swift kullanarak bir ScrollView nasıl oluşturulur?

Sorunum, kodumda scrollview çalışmalarının nasıl yapılacağını bilmem. Aşağıdaki kodu ViewController.swift'de görebildiğim gibi koymuştum ve bir ViewController için Main.storyboard'daki Outlet "scroller" ı seçebilmek için bekliyordum, bunun yerine *"fatal error: Can't unwrap Optional.None (lldb)"* EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0)

Bazı ViewController ekranlarım var ve bunlardan birinde bir ScrollView ekledim ve Swift'i kullanarak çalışmasını istiyorum.

Bu konuda şaşırıp: Birisi nasıl sorunumu çözecek hızlı kullanan bir scrollview yapmak basit bir örnek verebilirseniz

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

sanırım. Herhangi bir yardım için teşekkür ederiz.

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-Köprü-Header.h

: Bir .m ve .h dosyasını kullanarak bunu yapmaya çalıştım bir eski tarzında yapmak çalışılıyor

#import <UIKit/UIKit.h> 

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

Alkışlar

+0

Lütfen sorunuzla ilgili daha fazla açıklama sağlayın. Aksi takdirde düşük kaliteli –

+0

Hi T.S. Daha fazla açıklama ekledim. Yeterli ise lütfen bana bildirin. – Alex

+0

Prizin bağlı olduğundan emin misiniz? Hata, herhangi bir belirli kaydırma görünümü sorunundan ziyade, örtülü olarak isteğe bağlı bir isteğe bağlı olarak bir Yok değerinizin olduğunu gösterir. – jrturton

cevap

10

Şuna bir şans verelim. Unutulmaması gereken tek şey, self.view'i UIScrollView olarak indirmenin bir yolunu bulmama neden oldu, bu yüzden self.view.contentOffset gibi arama yapamazsınız.

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

Çekim için teşekkürler, ama yapmaya çalıştığım şey için değil. – Alex

0

Çıkışınız bağlı değil. 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

itibaren bu değer bağlı değil ise, o nil olarak kalacağını ve değer erişirken bir çalışma zamanı hatası olacaktı.

+0

Merhaba Jrturton, bu çok sorunum var neden açıklamak. Sanırım bu kitaba zaten sahibim. Paylaştığın için teşekkürler. AMA Çıkışı almak için kodu nasıl düzeltebiliriz? .m (Objective C dosyası) ile bir köprü yapmam gerekiyor mu? Aynı kodu ViewController.m'de ve köprü üstbilgi dosyasında bir referans var. – Alex

+0

Kodda bir sorun yok. Çıkışı arayüz oluşturucuya bağladığınızdan emin olmanız gerekir. Görünüm denetleyici nesnesini seçin ve çıkışın bağlı olduğunu kontrol edin. – jrturton

+0

Vay, tamam, sorun tam olarak bu, eğer arayüz oluşturucuya gidip görüntü denetleyicisini seçip mevcut çıkışı bağlamaya çalışırsam, "scroller" görünmez – 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); 

    }