5

我正在使用“插件”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

4 回答 4

6

对于 UIBarButtonItem 这有效

@IBOutlet weak var sideButton: UIBarButtonItem!

@IBAction func sideButtonPress(sender: UIBarButtonItem) {
       revealViewController().revealToggle(sender)
}
于 2014-12-09T23:00:21.470 回答
2

感谢 Slavik Voloshyn,即使我之前尝试过但没有成功,最好的方法是:

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

于 2014-07-30T09:32:09.373 回答
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())
    }
}
于 2015-08-30T05:45:15.443 回答
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 中的单元格,并使用属性检查器将其标识符更改为 myCell。

通过右键单击表格并将其拖到表格视图控制器上方的黄色图标并一一选择委托和数据源,将这个TableViewController的委托,数据源设为自己。

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

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

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

运行并测试应用程序。

于 2016-11-08T05:50:54.063 回答