我是iOS的初学者。
我有个问题,我创建了一个名为ModalViewController的类。为了使它成为一个普通类,我没有给这个类中的textView提供任何文本。所以当我呈现这个viewController时,我试图改变文本。
但我犯了个错误。我怎样才能修好它?
此外,如何在文本视图中更改margin值?
主故事板
ios - 模态视图 Controller 中的文本在 View  Controller 中未更改-LMLPHP
主视图控制器.swift

import UIKit

var modalview : ModalViewController!
class ViewController: UIViewController {
...
    @IBAction func Onclick(_ sender: Any) {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let myAlert = storyboard.instantiateViewController(withIdentifier: "ModalViewController")
        myAlert.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
        myAlert.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
        modalview.modalCustomAlert.text = "test test test text" // Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
        self.present(myAlert, animated: true, completion: nil)
    }

ModalViewController.swift命令
import Foundation
import UIKit

class ModalViewController : UIViewController {

    @IBOutlet weak var modalCustomAlert: UITextView!
    @IBOutlet weak var cancelButton: UIButton!
    @IBOutlet weak var okButton: UIButton!
    @IBAction func cancelPress(_ sender: Any) {
    }
    @IBAction func okPress(_ sender: Any) {
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        modalCustomAlert.layer.cornerRadius = 8
    }

    @IBAction func modalbutton(_ sender: Any) {

    }
}

编辑开始
我试图分配一个值,但错误没有变化。
var modalview = ModalViewController()
...
    @IBAction func Onclick(_ sender: Any) {
        ...
        modalview.modalCustomAlert.text = "test test test text" // Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value

    }

编辑二开始
我已经试过了。但当我看到@PGDev的答案时,我又试了一次,但还是显示了同样的错误。
    @IBAction func Onclick(_ sender: Any) {
        ...
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let myAlert = storyboard.instantiateViewController(withIdentifier: "ModalViewController") as! ModalViewController
        myAlert.modalPresentationStyle = .overCurrentContext
        myAlert.modalTransitionStyle = .crossDissolve
        myAlert.modalCustomAlert.text = "test test test text" // Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
        self.present(myAlert, animated: true, completion: nil)
    }

最佳答案

致命错误:隐式展开可选值时意外找到nil

modalview.modalCustomAlert.text = "test test test text"

例外是因为modalviewnilmodalCustomAlertnil
一。你已经创建了modalview作为隐式展开的可选选项,比如,
var modalview : ModalViewController!

在访问之前,请检查是否已将任何值分配给modalview。如果你没有,这将导致崩溃。
2。接下来,您创建了一个outletmodalCustomAlert
@IBOutlet weak var modalCustomAlert: UITextView!

这也是一个隐式展开选项。检查outlet是否正确连接。如果不是,它将引发运行时异常。
如果隐式展开的可选项为nil并尝试访问其
包装的值,将触发运行时错误。结果就是
就像你在一个普通的可选的后面放一个感叹号
不包含值。
编辑-1:
var modalview = ModalViewController()

上面的代码无法连接outlets中的ModalViewController。这就是modalCustomAlertnil并导致异常的原因。
使用故事板创建modalview
let modalview = storyboard.instantiateViewController(withIdentifier: "ModalViewController")

不过有一个问题。如果它们都是modalview类型,那么分别创建myAlertModalViewController的原因是什么?
编辑-2:
我认为甚至不需要创建modalview。只需在获得异常的行使用myAlert视图。所以ViewController的代码是这样的,
class ViewController: UIViewController {
    //....
    @IBAction func Onclick(_ sender: Any) {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let myAlert = storyboard.instantiateViewController(withIdentifier: "ModalViewController") as! ModalViewController
        myAlert.modalPresentationStyle = .overCurrentContext
        myAlert.modalTransitionStyle = .crossDissolve
        myAlert.modalCustomAlert.text = "test test test text"
        self.present(myAlert, animated: true, completion: nil)
    }
}

编辑-3:
明白了。只是没有意识到你正在访问modalCustomAlert之前,出口被创建。
首先,在ModalViewController中创建一个属性text。在viewDidLoad()中,将这个text添加为modalCustomAlert.text,即。
class ModalViewController : UIViewController {
    //rest of the code....
    var text: String? //here....

    override func viewDidLoad() {
        super.viewDidLoad()
        modalCustomAlert.layer.cornerRadius = 8
        self.modalCustomAlert.text = text //here....
    }
}

现在,当创建alertView时,替换
myAlert.modalCustomAlert.text = "test test test text"

具有
myAlert.text = "test test test text"

关于ios - 模态视图 Controller 中的文本在 View Controller 中未更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57781882/

10-14 22:06