gpt4 book ai didi

ios - 在其他 UIPageViewController 中执行 segue

转载 作者:行者123 更新时间:2023-11-28 05:32:33 32 4
gpt4 key购买 nike

我在执行 segue 操作时遇到问题。我使用 InstructionView 设置对象并在 PageViewController 类中调用它来创建新的 viewController。

我可以在哪里设置 Action ,使用 perform segue。如果我在 InstructionView 中这样做,它会崩溃。我确实将它嵌入为 NavigationController。我想我应该制作一个委托(delegate)方法,但我不知道在这种情况下如何做。

查看下面我的代码:

    protocol InstructionViewDelegate
{
func didTapLabel(myString: NSString)
}

class InstructionView: UIViewController
{
var delegate : InstructionViewDelegate!
var pageIndex : Int = 0
var titleText : String = ""
var otherImageFile : String = ""

var tapLabel = UITapGestureRecognizer()

override func viewDidLoad()
{
....

var label = UILabel(frame: CGRectMake(16, 825, 736, 104))
....
view.addSubview(label)

var imageViewObject : UIImageView
....
view.addSubview(imageViewObject)

tapLabel = UITapGestureRecognizer(target: self, action: "imageLabelAction:")
tapLabel.numberOfTapsRequired = 1
label.addGestureRecognizer(tapLabel)
label.userInteractionEnabled = true
imageViewObject.addGestureRecognizer(tapLabel)
imageViewObject.userInteractionEnabled = true

}

func imageLabelAction(sender: AnyObject)
{
delegate.didTapLabel("The image was tapped")
}

页面 View Controller :

class PageViewController: UIViewController, UIPageViewControllerDataSource, InstructionViewDelegate
{
var pageViewController : UIPageViewController?
var pageTitles : Array<String> = ["", "", ""]
var otherImages : Array<String> = ["", "", ""]
var currentIndex : Int = 0

override func viewDidLoad()
{
super.viewDidLoad()

pageViewController = UIPageViewController(transitionStyle: .Scroll, navigationOrientation: .Horizontal, options: nil)
pageViewController!.dataSource = self

let startingViewController: InstructionView = viewControllerAtIndex(0)!
let viewControllers: NSArray = [startingViewController]
pageViewController!.setViewControllers(viewControllers, direction: .Forward, animated: false, completion: nil)
pageViewController!.view.frame = CGRectMake(0, 0, view.frame.size.width, view.frame.size.height);

addChildViewController(pageViewController!)
view.addSubview(pageViewController!.view)
pageViewController!.didMoveToParentViewController(self)
}
func didTapLabel(myString: NSString) {
println(myString)
self.performSegueWithIdentifier("testSegue", sender: self)
}


.....

func viewControllerAtIndex(index: Int) -> InstructionView?
{
if self.pageTitles.count == 0 || index >= self.pageTitles.count{
return nil
}

let pageContentViewController = InstructionView()
pageContentViewController.otherImageFile = otherImages[index]
pageContentViewController.titleText = pageTitles[index]
pageContentViewController.pageIndex = index
pageContentViewController.delegate = self
currentIndex = index

return pageContentViewController
}
}

最佳答案

是的,我认为代表可能是最好的途径。在您的 InstructionView Swift 文件中,定义一个协议(protocol)来描述从 InstructionView 到其委托(delegate)的通信:

protocol InstructionViewDelegate {
func didTapLabel(myString : String)
}

我假设您将一个字符串值从 InstructionView 传回委托(delegate);对此进行修改以反射(reflect)您实际想要传递的数据。向 InstructionView 添加一个 delegate 变量:

var delegate : InstructionViewDelegate!

同时添加一个 imageLabelAction 函数,如下所示:

func imageLabelAction(sender: AnyObject) {
// perform any actions here in response to the label being tapped, and finish with:
delegate.didTapLabel("The image label was tapped")
// (amend the argument to what you need to send to your TestViewController)
}

修改PageViewController的类定义,指明它采用InstructionViewDelegate协议(protocol):

class PageViewController: UIViewController, UIPageViewControllerDataSource, InstructionViewDelegate {

请记住将 InstructionView 的委托(delegate)设置为指向自身:

startingViewController.delegate = self

然后实现协议(protocol)定义的功能:

func didTapLabel(myString: String) {
println(myString)
// do any processing here (e.g. save myString to a local var)
// before triggering the segue:
self.performSegueWithIdentifier("FromPageVCtoTestVC", sender: self)
}

然后您可以使用 prepareForSegue 以通常的方式将相关数据传递到目标 View Controller 。

关于ios - 在其他 UIPageViewController 中执行 segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27215182/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com