www.91084.com

GVKun编程网logo

在Swift中从另一个ViewController访问变量(swift调用接口)

14

在这篇文章中,我们将为您详细介绍在Swift中从另一个ViewController访问变量的内容,并且讨论关于swift调用接口的相关问题。此外,我们还会涉及一些关于iOSSwiftwindow.ro

在这篇文章中,我们将为您详细介绍在Swift中从另一个ViewController访问变量的内容,并且讨论关于swift调用接口的相关问题。此外,我们还会涉及一些关于iOS Swift window.rootViewController vs presentViewController、ios – Swift:从另一个viewcontroller调用函数使对象为零、ios – 从Swift的另一个ViewController访问变量、ios – 从我在swift中使用modal打开的viewController访问navigationController的知识,以帮助您更全面地了解这个主题。

本文目录一览:

在Swift中从另一个ViewController访问变量(swift调用接口)

在Swift中从另一个ViewController访问变量(swift调用接口)

我有以下内容ViewController

class PageContentViewController: UIViewController {    var pageIndex: Int}

我如何pageIndex从另一个ViewController 访问?

我需要访问pageIndex此功能:

func pageViewController(pageViewController: UIPageViewController!, viewControllerBeforeViewController viewController: UIViewController!) -> UIViewController! {    //var index: Int    //index = ?    NSUInteger index = ((PageContentViewController*) viewController).pageIndex; // in Swift?    if ((index == 0) || (index == NSNotFound)) {        return nil;    }    index--;    return [self viewControllerAtIndex:index]; // in Swift?}

答案1

小编典典

默认情况下,swift中的所有内容都是公开的,因此,如果您声明以下内容:

class SomeViewController: UIViewController {    var someVariable: SomeType = someValue    init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)    }}

只要拥有它的实例,就可以访问它:

var myCustomViewController: SomeViewController = SomeViewController(nibName: nil, bundle: nil)var getThatValue = myCustomViewController.someVariable

iOS Swift window.rootViewController vs presentViewController

iOS Swift window.rootViewController vs presentViewController

在多个视图之间切换的最佳做法是什么?更改rootViewController或使用模态视图?

设置rootviewController:

let storyBoard : UIStoryboard = UIStoryboard(name: "Main",bundle: nil)
var vc : UIViewController = storyBoard.instantiateViewControllerWithIdentifier("viewTarget") as TargetViewController
var window :UIWindow = UIApplication.sharedApplication().keyWindow!
window.rootViewController = vc;
window.makeKeyAndVisible()

更改模态视图:

let storyBoard : UIStoryboard = UIStoryboard(name: "Main",bundle: nil)
let initViewController: UIViewController = storyBoard.instantiateViewControllerWithIdentifier("viewTarget") as TargetViewController
self.presentViewController(initViewController,animated: false,nil)

当我需要向用户呈现其他视图时,我很困惑.

附:就我而言,我的应用程序以登录表单作为rootViewController开始.登录后,我认为最好更改rootViewController,但我是对的吗?

解决方法

我的建议是,而不是困扰很多,你只需要覆盖rootviewController剩下的东西由你的应用程序照顾.

let storyBoard : UIStoryboard = UIStoryboard(name: "Main",bundle: nil)
    let initViewController: UIViewController = storyBoard.instantiateViewControllerWithIdentifier("viewTarget") as TargetViewController
    self.window?.rootViewController? = initViewController

在这段代码中,我们只是从AppDelegate覆盖了rootview控制器.

ios – Swift:从另一个viewcontroller调用函数使对象为零

ios – Swift:从另一个viewcontroller调用函数使对象为零

我有两个简单的ViewController:第一个有一个链接到UI ImageView的IBOutlet和一个设置图像alpha通道的函数.第二个控制器有一个按钮,当它被触发时,应调用该功​​能来设置alpha通道.

这是我的代码:

class FirstViewController: UIViewController {

     @IBOutlet imageView: UIImageView! 

     func changeAlphaChannel() {
         imageView.alpha = 0.5
     }
}

class SecondViewController: UIViewController {

     let firstController = FirstViewController()

     @IBAction func buttonpressed(sender: UIButton) {
         firstController.changeAlphaChannel()
     }
}

在FirstViewController中调用changeAlphaChannel()可以正常工作,但是如果我按下按钮调用它,则imageView变为零并且应用程序崩溃.
我怎样才能解决这个问题?
谢谢

解决方法

它的崩溃是因为你的imageView是零.用FirstViewController()初始化firstController是行不通的.您必须从故事板加载该视图控制器.你可以这样做

let storyboard: UIStoryboard = UIStoryboard.init(name: "StoryboardName",bundle: nil)
let firstViewController: FirstViewController = storyboard.instantiateViewControllerWithIdentifier("StoryboardIdentifier") as! FirstViewController

UPDATE

现在,只有在实例化firstViewController的视图时才会设置firstViewController的IBOutlets,在您的情况下不会发生这种情况.你要做的是首先显示firstViewController的视图,然后调用你的函数.

ios – 从Swift的另一个ViewController访问变量

ios – 从Swift的另一个ViewController访问变量

我有以下ViewController:
class PageContentViewController: UIViewController {

    var pageIndex: Int

}

如何从另一个ViewController访问pageIndex?

我需要在此功能中访问pageIndex:

func pageViewController(pageViewController: UIPageViewController!,viewControllerBeforeViewController viewController: UIViewController!) -> UIViewController! {

    //var index: Int
    //index = ?

    NSUInteger index = ((PageContentViewController*) viewController).pageIndex; // in Swift?

    if ((index == 0) || (index == NSNotFound)) {
        return nil;
    }

    index--;

    return [self viewControllerAtIndex:index]; // in Swift?
}

解决方法

swift中默认的一切都是公开的,因此如果你声明如下:
class SomeViewController: UIViewController {
    var someVariable: SomeType = someValue

    init(nibName nibNameOrNil: String?,bundle nibBundleOrNil: NSBundle?) {
        super.init(nibName: nibNameOrNil,bundle: nibBundleOrNil)
    }
}

只要你有一个实例,你可以访问它:

var myCustomViewController: SomeViewController = SomeViewController(nibName: nil,bundle: nil)
var getThatValue = myCustomViewController.someVariable

ios – 从我在swift中使用modal打开的viewController访问navigationController

ios – 从我在swift中使用modal打开的viewController访问navigationController

我正在使用navigationController(推和弹出),但在一个特殊情况下,我必须使用模态segue显示下一个viewcontroller,当我解雇那个模态我想在navigationController中弹出最后一个viewController,然后推出一个新的后出现解雇模态一,如何从模态viewController访问充满viewControllers的navigationController
我可以发送导航控制器中的最后一个元素作为模式的prepareForSegue中的self,但我问是否有另一种方式,抱歉我的问题总是很复杂

解决方法

听起来像 delegation或 notifications的工作,取决于你想要的方式.在任何一种情况下 – 您的navigationController都可以被通知在正确的时间执行segue,或者作为委托访问和指示这样做.

我们今天的关于在Swift中从另一个ViewController访问变量swift调用接口的分享就到这里,谢谢您的阅读,如果想了解更多关于iOS Swift window.rootViewController vs presentViewController、ios – Swift:从另一个viewcontroller调用函数使对象为零、ios – 从Swift的另一个ViewController访问变量、ios – 从我在swift中使用modal打开的viewController访问navigationController的相关信息,可以在本站进行搜索。

本文标签: