【问题标题】:Implementing SWRevealViewController in Swift在 Swift 中实现 SWRevealViewController
【发布时间】:2014-09-02 10:06:00
【问题描述】:

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

所以请指正。

【问题讨论】:

  • 你好。我对手势也有同样的问题。我已经尝试过您的解决方案,但看起来不太好。你有没有找到另一种方法来做到这一点?谢谢。
  • 我找到了一个更好的附加手势解决方案。把它放到你前面的 ViewController 中。 self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer());
  • 您可以添加您的 swift 代码作为答案吗?
  • 你是如何快速从显示视图控制器转移到前视图控制器的?我在我的 swift 项目中添加了 SWrevealViewController 类,但是从后到前移动时出现问题。在 tableview didselect 方法中?

标签: ios objective-c swift swrevealviewcontroller


【解决方案1】:

对于 UIBarButtonItem 这有效

@IBOutlet weak var sideButton: UIBarButtonItem!

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:
      @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())
          }
      }
      

      【讨论】:

      • 如果你能解释为什么这段代码应该是解决方案,这将有所帮助。
      【解决方案4】:

      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 的 outlet。

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

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

      运行并测试应用程序。

      【讨论】:

        猜你喜欢
        • 2016-04-15
        • 2023-03-03
        • 2014-08-31
        • 2018-03-31
        • 2017-07-11
        • 2015-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多