菜鸟教程小白 发表于 2022-12-11 19:01:55

ios - 更新不同 View Controller 中的标签文本


                                            <p><p>我正在努力将一个 ViewController 的选择器 View 中的选定选项传递给另一个 ViewController 中标签的标签文本。带有我要更新标签的 VC 具有 Storyboard 标识符:“PageContentViewController”。带有我的选择器 (periodPicker) 的 VC 在 View 底部有一个“选择”按钮,按下时会调用以下函数:</p>

<pre><code>@IBAction func selectButtonPressed(_ sender: Any){

    let row = periodPicker.selectedRow(inComponent: 0)
    let selected = periodType

    let pageContentViewController = self.storyboard?.instantiateViewController(withIdentifier: &#34;PageContentViewController&#34;) as! PageContentViewController

    pageContentViewController.periodLabelTitle = selected

}
</code></pre>

<p><code>PageContentViewController</code>类的代码是</p>

<pre><code>import UIKit

class PageContentViewController: UIViewController {      

    @IBOutlet weak var periodLabel: UILabel!

    @IBOutlet weak var dateLabel: UILabel!

    var pageIndex: Int = 0
    var periodLabelTitle: String!
    var dateLabelTitle: String!

    override func viewDidLoad() {
      super.viewDidLoad()

      periodLabel.text = periodLabelTitle
      dateLabel.text = dateLabelTitle

    }

}
</code></pre>

<p>当通过选项卡按钮(它是一个基于选项卡的应用程序)导航到 <code>PageContentViewController</code> 时,标签文本不会更新。我哪里错了?</p>

<p>我尝试在 <code>pageContentViewController</code> 的 <code>viewDidAppear</code> 方法中使用 <code>periodLabel.text = periodLabelTitle</code> 命令,但这仍然不起作用(在之前按下了“选择”按钮)。</p>

<p>我相信提到 <code>PageContentViewController</code> 是 <code>UIPageViewController</code> 的子 VC 也是相关的。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>在 <code>selectButtonPressed(_:)</code> 中,您正在创建 <code>PageContentViewController</code> 的新实例:</p>

<pre><code>// Creates a new instance of PageContentViewController and assigns it to pageContentViewController
let pageContentViewController = self.storyboard?.instantiateViewController(withIdentifier: &#34;PageContentViewController&#34;) as! PageContentViewController
</code></pre>

<p>要更新标签栏中可见的 ViewController 中的标签,您必须使用该实例而不是新实例。这是一个关于如何执行此操作的示例:</p>

<pre><code>tabBarController?.viewControllers.periodLabelTitle = selected
</code></pre>

<p>请注意,我在示例中使用了索引 <code>0</code>。如果您的 <code>PageContentViewController</code> 不是标签栏中的第一个元素,您可能需要更改索引。</p>

<p>还请注意,虽然这回答了您的问题,但这可能不是实现此类事情的最佳方式,因为此解决方案取决于 ViewController 的顺序。我建议使用 </p>

<ul>
<li> ViewController 之间的委托(delegate)模式或</li>
<li>NSNotificationCenter</li>
<li>键值观察</li>
</ul></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 更新不同 ViewController 中的标签文本,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/42316768/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/42316768/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 更新不同 View Controller 中的标签文本