UISliders 和 UILabels 和 viewControllers

UISliders and UILabels and viewControllers

我如何才能 increase/decrease 通过使用位于不同 viewController 中的 UISlider 来调整我的 UILabel 的大小?

我有一个带有 UILabel1 的 viewController1,我有一个带有 UISlider 的 viewController2。使用 UISlider,我有另一个标签 UILabel2,只是为了查看文本有多大。我也希望 UILabel1 到 increase/decrease 而不是只有一个标签到 increase/decrease.

用于 UISLider 的代码是,

  @IBOutlet weak var label: UILabel!
  @IBOutlet weak var slider: UISlider!

  @IBAction func sizeChanged(sender: UISlider) {
    let senderValue = CGFloat(sender.value)
    label.font = UIFont(name: label.font.fontName, size: senderValue)
}

这段带有 UILabel 的代码用于 viewController2,我想更改 viewController1 中另一个 UILabel 的大小。

这是viewController1:

import UIKit

class ViewController1: ViewController {


@IBOutlet weak var label1: UILabel!

@IBOutlet weak var scrollView1: UIScrollView!


override func viewDidLoad() {
    super.viewDidLoad()

    scrollView1.contentSize.height = 5000

    scrollView1.contentSize.width = 375


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

这是viewController2:

 @IBOutlet weak var label: UILabel!
@IBOutlet weak var slider: UISlider!

@IBAction func sizeChanged(sender: UISlider) {
    let senderValue = CGFloat(sender.value)
    label.font = UIFont(name: label.font.fontName, size: senderValue)
}




override func viewDidLoad() {
    super.viewDidLoad()



}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

任何帮助都会很棒。

我认为,您可以查看 NSNotificationCenter's 功能,尤其是 NSNotification's userInfo: 范围。您可以将滑块的值从第一个 VC 传递到 userInfo,然后在第二个 VC.

中收听此通知

Objective-C 中此方法的绝佳示例:

在计算机编程中,当某些事情看起来困难或复杂时,您应该寻找方法将其分解为更容易解决的较小问题。你的就是一个很好的例子。你问:

How would I be able to increase/decrease the size of my UILabel by using UISlider which is in a different viewController?

那么,要实现这一目标,任何人都需要执行哪些步骤?这里基本上分为三个步骤:

  1. 获取滑块的值。
  2. 将值从一个视图控制器发送到另一个。
  3. 使用一个值来设置标签的大小。

如何获取滑块的值? 这很简单。将滑块的目标设置为管理它的视图控制器,并将其动作设置为视图控制器中的某个动作。当滑块更改时将调用该方法。该操作将如下所示:

@IBAction func sliderValueChanged(sender: UISlider) {
    let value = sender.value
    // do something with the value
}

如何将数据从一个视图控制器发送到另一个视图控制器? SO 上有很多问题都涵盖了这一点。其中,Passing Data Between View Controllers 可能是规范的。有很多选项,包括:

  • 让一个视图控制器调用另一个视图控制器中的方法。如果带有滑块的视图控制器引用了带有标签的视图控制器,它只需要在滑块更改时调用一些方法,将新值传递给另一个控制器。或者,可能是带有标签的视图控制器引用了带有滑块的视图控制器,如果滑块的控制器是由标签的控制器创建的,这是非常典型的。在这种情况下,标签的控制器可以调用方法来检索值。

  • 将数据广播给使用通知收听的任何人。当滑块发生变化时,它的操作可以 post 发出具有新值的通知。任何对象,包括带有标签的控制器,都可以侦听该通知并对其进行操作。

  • 使用合适的数据模型。 MVC(模型-视图-控制器)范例在 Cocoa 中很重要,如果您的应用程序非常重要,它应该有自己的数据模型。该模型可能是存储滑块最新设置的合理位置,带有标签的控制器可以在其视图出现时从那里读取它。

  • 将值存储在某处。全局变量是通往设计糟糕的应用程序的捷径,但它们的简单性对初学者很有吸引力。更好的选择可能是默认系统,它至少让应用程序退出时值仍然存在。

所以,那里有很多选择。忘掉滑块和标签,想想你的应用程序中的视图控制器应该如何相互通信。一旦你弄清楚了,滑块设置只是他们必须互相说的另一件事。您选择的样式会告诉您在上面的操作方法中放置什么来代替注释。

如何设置标签的大小?有点不清楚你说的设置大小是什么意思。你想改变字体大小,还是标签的宽度,或者宽度和高度?无论如何,对于您可能想要设置的标签的所有属性,都有访问器,因此请查看文档。当标签的视图控制器通过上述方法之一获取新值时,它应该更新标签的适当 属性 。您通常将标签连接到视图控制器中的 IBOutlet 属性 以使控制器可以轻松访问标签。