Как создать ScrollView с помощью Swift?

Я создаю свое первое приложение для IOS, и я изо всех сил пытаюсь найти способ сделать простой ScrollView с помощью кода Swift на XCode6, пожалуйста, кто-нибудь поможет мне найти решение?

Моя проблема в том, что я не знаю, как заставить scrollview работать в моем коде. Я уже поместил код, как вы можете видеть ниже в ViewController.swift, и я ожидал, что вы сможете выбрать "прокрутку" Outlet в Main.storyboard для ViewController, вместо этого я получаю ошибку *"fatal error: Can't unwrap Optional.None (lldb)"* EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0)

У меня есть несколько экранов ViewController, и в одном из них я поместил один ScrollView, и я хочу, чтобы он работал с помощью Swift.

Я застрял в этом:

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

Я думаю, что если кто-то может предоставить простой пример, как сделать scrollview с помощью swift, он решит мою проблему. Любая помощь ценится.

Пытаясь сделать это в старом стиле, я попытался сделать это с помощью файлов .m и .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

Амиго-моста-header.h

#import <UIKit/UIKit.h>

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

Приветствия

Ответ 1

Позвольте этому выстрелу. Единственное, что нужно отметить: мне еще предстоит найти способ downcast self.view как UIScrollView, поэтому вы не можете делать такие вызовы, как 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)
    }

}

Ответ 2

Ваша розетка не подключена. Из Swift с objective-C книгой:

Когда вы объявляете выход в Swift, компилятор автоматически преобразует этот тип в слабое неявно разворачиваемое необязательное и присваивает ему начальное значение nil. По сути, компилятор заменяет @IBOutlet var name: Type на @IBOutlet weak var name: Type! = nil

Если это значение не было подключено, оно останется таким же, как и у nil, и вы получите ошибку времени выполнения при доступе к значению.

Ответ 3

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

    }