在Swift中实现SWRevealViewController

时间:2014-07-11 17:41:31

标签: ios objective-c swift swrevealviewcontroller

我正在使用'插件' SWRevealViewController帮助我的应用程序生成侧边栏。现在在objective-C中,您可以使用以下代码控制侧栏:

[self.sidebarButton setTarget: self.revealViewController];
        [self.sidebarButton setAction: @selector( revealToggle: )];
        [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];

其中sidebarButton已连接UIBarButtonItem和IBOutlet。现在我试图将它应用于我的Swift代码,并且我取得了成功。

我已经设置了@IBOutlet var按钮。现在我尝试了UIBarButtonItem和UIButton。当我尝试UIBarButtonItem时,我使用了以下行:

button = UIBarButtonItem(barButtonSystemItem: .Add, target: self.revealViewController(), action: "revealToggle:")

然而,这没有任何作用,按钮也不起作用。但是,如果我将按钮设置为UIButton并将其与以下内容挂钩:

button.addTarget(self.revealViewController(), action:"revealToggle:", forControlEvents:UIControlEvents.TouchUpInside)

这可以将栏滑出而不是通过手势。问题是我无法在工具栏中添加UIButton(无论如何都是在StoryBoard中)。

那么有没有办法正确实现这个? 此外,是否可以添加手势识别器?

由于

修改

好吧,我已经设法让手势切换工作,虽然我认为我的方法有点冗长:

var swipeRight = UISwipeGestureRecognizer(target: self.revealViewController(), action: "revealToggle:")
    swipeRight.direction = UISwipeGestureRecognizerDirection.Right
    self.view.addGestureRecognizer(swipeRight)

    var swipeLeft = UISwipeGestureRecognizer(target: self.revealViewController(), action: "revealToggle:")
    swipeLeft.direction = UISwipeGestureRecognizerDirection.Left
    self.view.addGestureRecognizer(swipeLeft)

所以请更正。

4 个答案:

答案 0 :(得分:6)

对于UIBarButtonItem这是有效的

@IBOutlet weak var sideButton: UIBarButtonItem!

@IBAction func sideButtonPress(sender: UIBarButtonItem) {
       revealViewController().revealToggle(sender)
}

答案 1 :(得分:2)

感谢Slavik Voloshyn,尽管我之前尝试过这个并且没有用,但最好的方法是:

self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer());

答案 2 :(得分:1)

@IBOutlet weak var menu: UIBarButtonItem!

override func viewDidLoad() {
    super.viewDidLoad()

    if self.revealViewController() != nil {
        menu.target = self.revealViewController()
        menu.action = "revealToggle:"
        self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
    }
}

答案 3 :(得分:0)

SWRevealViewController是一个侧视图控制器,灵感来自用Objective-C编写的facebook菜单样式。在这里,我将向您展示如何在基于swift的应用程序中使用它。我们在Oodles Technologies中遵循这一流程。

struct Bird{
    var name:String!
}

更改课程的以下方法,如下所示。

override func viewDidLoad() {
        super.viewDidLoad()
        birds.append(Bird(name: "Pigeon"))
        birds.append(Bird(name: "Crow"))
        birds.append(Bird(name: "Peacock"))
        birds.append(Bird(name: "Duck"))
        birds.append(Bird(name: "Parrot"))
        birds.append(Bird(name: "Eagle"))
    }

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return birds.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as UITableViewCell
        cell.textLabel?.text = birds[indexPath.row].name
        // Configure the cell...

        return cell
    }

从主故事板中选择TableViewController中的单元格,并使用Attributes inspector将其标识符更改为myCell。

通过右键单击表格,将此TableViewController的委托,数据源设置为自己,并在表格视图控制器上方拖动到黄色图标,然后逐个选择委托和数据源。

向其他视图控制器添加一个按钮,该控制器现在是该视图左上角的MainViewController,并使用Assistant Editor并排打开MainViewController.swift,并在swift文件中创建一个名为menuButton的插座。

在MainViewController类的viewDidLoad中添加以下代码。

menuButton.addTarget(self.revealViewController(), action: "revealToggle:", forControlEvents: UIControlEvents.TouchUpInside)

运行并测试应用程序。