使用当前模态将数据从一个 uiviewcontroller 发送到另一个导航控制器

2024-03-31

我是 Swift 新手,我正在使用情节提要,并使用导航控制器从一个视图控制器连接到另一个视图控制器。我想将单击的图像的名称发送到下一个视图控制器,该视图控制器在故事板中从 imageView 进行模态连接。我搜索了很多有关将数据从一个视图控制器传输到与导航控制器模态连接的另一个视图控制器的信息,但没有可用的解决方案。如果需要任何代码,请告诉我,因为我不知道如何继续。我知道这可能是最愚蠢的问题,但在网上搜索了很多之后才发布这个问题。

根据@uraimo 回复进行编辑。

我需要为我在故事板上创建的每个转场提供名称吗? 我在 viewcontrollerA 上有 2 个固定图像,并且我放置了一个具有透明背景的 uibutton,每个按钮上都没有文本,然后 ctrl 拖动到 viewcontrollerB 的导航控制器模态呈现并通过 ctrl 拖动 viewcontrollerB 的后退按钮以退出 viewcontrollerB 并将其展开,然后将后退按钮(即 UIBarButtonItem)展开到 viewcontrollerA。

这就是我如何创建导航,从 viewcontrollerA 的 3 个图像中的任何图像单击到 viewcontrollerB,然后单击 viewcontrollerB 的后退按钮返回到 viewcontrollerA。 如果我做错了什么,请告诉我,您的prepareForSegue 代码对完成我的任务是否有用。


基本上,无论是使用 IB 还是以编程方式执行此操作,都必须在执行 segue 之前使用所需的所有数据配置新的视图控制器(或者通过代码呈现控制器)。

在您的情况下,只需设置图像名称(您的自定义视图控制器类你的视图控制器应该有一个特定的 String 属性来保存这个值)覆盖prepareForSegue在当前视图控制器类中:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "yourModalSegueIdentifier" {
            let imgName= (sender as! UIImageView)
            let destination = segue.destinationViewController as UINavigationController
            let yourController = destination.topViewController as YourViewController
            yourController.imageName= <name here>
        }
}

这就解决了传递数据的问题。

但在您的情况下,您需要单击图像的名称,并且只能通过 UIGestureRecognizer 添加单击事件来获得UIImageView.

因此,您需要一个 uigesturerecognized,单击后将执行您创建的 segue。而且,您将无法获取图像资源的名称(您用于创建图像资源的名称)UIImage using imageNamed:)因为它不再可用,你必须使用accessibilityIdentifier.

这使得一切变得更加复杂,似乎大部分都可以通过图形方式完成here https://stackoverflow.com/questions/11888891/how-do-i-add-a-segue-to-an-uigesturerecognizer and here https://stackoverflow.com/questions/17120476/click-event-on-uiimageview-programmatically-in-ios(但目前还不清楚如何做到这一点),但通常是通过代码完成的。

使用全局变量稍微简化一下:

var currentImage = ""

func viewDidLoad(){
    ...
    ...
    let aTap = UITapGestureRecognizer(target: self, action: Selector("imageTapped:"))
    aTap.numberOfTapsRequired = 1

    //For every image, configure it with recognizer and accessibilityId:
    firstImage.userInteractionEnabled = true
    firstImage.addGestureRecognizer(aTap)
    firstImage.accessibilityIdentifier = "firsImage"
    ...
}

func imageTapped(recognizer:UITapGestureRecognizer) {
    let imageView = recognizer.view as! UIImageView
    currentImage = imageView.accessibilityIdentifier
    self.performSegueWithIdentifier("yourModalSegueIdentifier", sender: self)
}

并改变这一点:

yourController.imageName= <name here>

to this:

yourController.imageName= currentImage

Update:

  • 我需要为我在故事板上创建的每个转场提供名称吗?

是的,这是识别他们的唯一方法UIStoryboardSegue有一个标识符。但请记住,segues 并不是从一个控制器转到另一个控制器的唯一方法,如果您完全以编程方式执行此操作(无 segues),则通常称为“presentViewController”。 Segues 是一个故事板概念。

再说一遍,关于 segue 名称/标识符,直到现在您才需要它,因为您从未从代码中引用该 segue,prepareForSegue 和 PerformSegueWithIdentifier 都需要它。只需选择 Segue 并在右侧检查器窗格中为其命名。

您描述的结构似乎没问题,唯一的问题是我不太确定是否真的需要 UIButtons,尝试使用从图像视图或直接从视图控制器到目标视图控制器的模式转场。

更新2:

如果您刚刚开始并需要一个免费课程来教您基础知识并让您构建一些有趣的 ios 应用程序,我推荐黑客与斯威夫特 https://www.hackingwithswift.com/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用当前模态将数据从一个 uiviewcontroller 发送到另一个导航控制器 的相关文章

  • “试图弹出到不存在的视图控制器。”

    当我调用我的方法 DismissView 时 我收到此错误 这是方法存根 IBAction dismissView RootViewController rootController RootViewController alloc ini
  • iphone navigationController :在退出当前视图之前等待 uialertview 响应

    我有一个带有由导航控制器管理的后退按钮的视图 我想在用户单击后退按钮时检查文件是否已保存 如果文件已保存 您将返回到上一个视图 否则 uialertview 会询问您是否要保存文件 所以我这样做了 但视图消失了 然后警报视图出现了 void
  • PreferredInterfaceOrientationForPresentation 必须返回受支持的界面方向 (iOS 6)

    我的应用程序窗口的根视图控制器是 UINavigationController 的子类 我已将此代码添加到类中 BOOL shouldAutorotate return self topViewController shouldAutoro
  • Swift 2 OAuth2 LinkedIn 连接

    我将使用 Swift 2 和 Xcode 7 制作一个本机 iOS 应用程序 用户应该使用 LinkedIn 和 OAuth 2 登录 但我想知道应该如何开始设置 我对 OAuth 2 没有太多经验 有好的教程或示例应用程序吗 我看到了雷
  • Swift:无法为“[UIViewController]”类型的值添加下标?

    我试图弄清楚如何在 Xcode 7 iOS9 上的 Swift 中解决此问题 并且我也遇到此错误 无法为 UIViewController 类型的值添加下标 索引类型为 Int 任何建议表示赞赏 谢谢 My code func indexP
  • 使用prepareForSegue传递数据

    我试图将数据从viewController 1传递到viewController2 我有2个按钮和1个segue 因此有一个segue标识符 这2个按钮 按下时每个按钮应显示 1个标签用于显示标题 1个textView用于显示定义 我很难显
  • 水平分隔符导航栏 IOS 7

    我已经包含了对导航栏 navigationController 的需求 其与栏视图控制器的背景色调相同 现在我有一个问题 在导航栏和视图之间我有一条水平线将它们分开 就像你一样从图片中可以看到 你能告诉我如何删除这条水平黑色线并使其更加一致
  • 为什么我的视图仍然以横向呈现?

    我的视图是由导航控制器控制的 因此我将导航控制器支持的方向设置为明确的纵向和纵向UpSideDown 这可以工作 但是如果调用视图时前一个视图处于横向状态 它将以横向方式呈现并保持横向状态 直到设备旋转 如何防止这种情况发生 这是我的代码
  • 如何在 iOS Swift 中获取来电的电话号码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在我的应用程序中获取来电者的电话号码 请有人迅速为我提供这个问题的解决方案 您将永远无法获得来电的电话号码 因为这是用户的私人数据
  • 如何使用 swift 在 UITabBarController 中以编程方式添加选项卡?

    如何以编程方式从 UIViewController 扩展的任何类创建选项卡 class DashboardTabBarController UITabBarController override func viewDidLoad here
  • 如何删除以前的 ViewController

    我是一名学生 对编程还很陌生 我正在尝试在业余时间学习 Objective C Swift 我使用 spriteKit 和 swift 制作了一个游戏 有多个菜单 场景 我正在尝试从一个视图控制器转换到另一个视图控制器 为此 我使用了以下代
  • iOS7状态栏和导航栏问题

    我正在将我的应用程序迁移到 iOS 7 为了处理状态栏问题 我添加了以下代码 if UIDevice currentDevice systemVersion floatValue gt 7 0f CGRect frame self navi
  • 调用 popToRootViewControllerAnimated 时未调用 viewWillDisappear

    我从事遗留应用程序的工作 并发现我的view Will Did Disappear方法并不总是被正确触发 情况是 我有一个 自定义 UIViewController在 AppDelegate 中设置为 rootViewController
  • 从 AppDelegate 启动 ViewController

    我有一个自定义 URL 方案 我想打开某个ViewController当我访问此 URL 时 这不是根 我已经能够做到这一点 剩下的就是推动这一点ViewController进入navigationController来自AppDelega
  • 如何打开/关闭 iPhone 相机闪光灯 swift 2?

    我正在寻找如何打开 关闭 iPhone 的相机闪光灯 我发现了这个 IBAction func didTouchFlashButton sender AnyObject let avDevice AVCaptureDevice defaul
  • Modal UIViewController 在 iPad 上总是全屏显示。为什么?

    我试图在 iPad 上创建一个简单的模式对话框 无论是小设置 UIModalPresentationFormSheet 还是大设置 UIModalPresentationPageSheet 但无论我做什么 它们都会全屏显示 带有标题栏 模态
  • 如何修复C风格的for语句?

    什么是正确的修复方法C 风格的 for 语句对于下面发布的代码 目前我正在交战 C 风格的 for 语句已弃用 并将在将来删除 斯威夫特的版本 var ifaddr UnsafeMutablePointer
  • 多个 ViewController(containerView?childView?viewController 的实例?)

    我需要在另一个视图之上添加一个新视图 带有 ViewController 用户与这个新视图交互了一段时间 然后我想将其删除 在旧版本的 Xcode 中 我可以将其添加为子视图 我现在收到 EXC BAD ACCESS 错误 我不希望添加的视
  • iPhone UIViewController 中的 UIPickerView

    我有一个 xib 其中添加了一个UIViewController名为德尔塔 delta 下的视图由 delta viewcontroller 控制 而不是由文件所有者控制 在三角洲视图中 我有一个UIViewPicker 我的问题是我正在编
  • 获取 UIView 的视图控制器(iphone)

    我这样做是为了获得视图 self superview viewWithTag 10 但我怎样才能获得该视图的视图控制器 就像您可以获得视图控制器的视图一样 我想采用另一种方式 以便我可以向该视图控制器发送消息 调用方法 例如 self su

随机推荐