我正在使用'插件' 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)
所以请更正。
答案 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)
运行并测试应用程序。