UISliders和UILabels以及viewControllers

时间:2016-05-12 21:07:52

标签: ios swift uiview uislider

如何通过使用位于不同viewController中的UISlider来增加/减小UILabel的大小?

我有一个带有UILabel1的viewController1,我有一个带有UISlider的viewController2。使用UISlider,我有另一个标签UILabel2,只是看看文本有多大。我希望UILabel1也能增加/减少而不是只增加/减少一个标签。

用于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.
}

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

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

  

如何通过使用位于不同viewController中的UISlider来增加/减小UILabel的大小?

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

  1. 获取滑块的值。
  2. 将值从一个视图控制器发送到另一个视图控制器。
  3. 使用值设置标签的大小。
  4. 如何获取滑块的值?这很简单。将滑块的目标设置为管理它的视图控制器及其对视图控制器中某些操作的操作。滑块更改时将调用该方法。行动将如下所示:

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

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

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

    • 将数据广播给使用通知收听的任何人。当滑块更改时,它的操作可以使用新值发布通知。任何对象(包括带有标签的控制器)都可以监听该通知并对其进行操作。

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

    • 将价值存放在某个地方。全局变量是设计糟糕的应用程序的简短途径,但它们的简单性对初学者很有吸引力。更好的选择可能是默认系统,至少在应用程序退出时让值保持不变。

    那么,有很多选择。忘记滑块和标签,并考虑应用中的视图控制器应如何相互通信。一旦你想出来,滑块设置只是他们必须互相说的一件事。您选择的样式将告诉您在上面的操作方法中放置什么代替注释。

    如何设置标签尺寸?通过设置尺寸,您有点不清楚。是否要更改字体大小,标签宽度或宽度和高度?在任何情况下,您都可以设置标签的所有属性的访问器,因此请查看文档。当标签的视图控制器通过上述方法之一获取新值时,它应该更新标签的相应属性。您通常将标签连接到视图控制器中的IBOutlet属性,以便控制器可以轻松访问标签。

答案 1 :(得分:0)

我认为,您可以查看NSNotificationCenter's功能,尤其是NSNotification's userInfo: 参数。您可以将滑块的值从第一个VC传递给userInfo,然后在第二个VC中收听此通知。

Objective-C中此方法的一个很好的例子: https://stackoverflow.com/a/7896761