【问题标题】:How can i control Font-size of all UI controls of iOS app sussing a UISLIDER?如何控制使用 UISLIDER 的 iOS 应用程序的所有 UI 控件的字体大小?
【发布时间】:2014-09-13 01:48:55
【问题描述】:

我正在开发一个原生 iOS 应用程序,其中有一个字体大小控制页面。我的最小字体大小为 13 像素,最大字体大小为 23 像素。

如果我更改该页面中的滑块值,则必须在整个应用程序中反映它,我该如何实现这些? .请帮我 。

我知道在 android 应用程序中,我们可以通过更改 dimens.xml 中的 text-font-size 来全局控制字体大小,这将出现在相应分辨率的 values 文件夹中。 因此,我们可以通过动态更改 dimens.xml 中的值来控制应用程序的字体大小。 Android 将处理运行应用程序的设备所在的分辨率文件夹。唯一的工作是为 text-font-size 提供值

所以在 iOS 中无论如何都要像上述方法一样控制所有 UIControls 的字体大小。因为我的 iOS 应用程序中有 UIViewcontrller 的数量。

我尝试更改特定的UIViewController,方法是将所有 UIControls 连接到 IBOutlet 并按照@Kapil Choubisa 对这个问题的回答中提到的那样控制它们。这是我必须在我的 iOS 中重复 UIViewcontrller 数量的一种方式。或者有任何方法我可以轻松控制整个应用程序的字体大小。

【问题讨论】:

  • 为什么反复投反对票? .请说明原因。
  • 我没有投反对票,但您的代表应该知道如何提出正确的问题。你试过什么?你的确切问题是什么?您的问题没有表现出任何努力(因此投反对票)。
  • 好的会尝试改变我尝试过的问题和方法
  • 这样做的原因是什么?在 iOS7 的设置(常规 > 辅助功能 > 大文本)中,有一个与您描述的完全一样的控件。您最好让您的应用根据本机设置进行调整,而不是在您自己的设置屏幕中自行实现。
  • 这是已经开发的安卓应用的完全复制品。所以在android中他们设计了这个功能。所以只能这样发展。

标签: ios uislider uifont


【解决方案1】:

您需要将字体大小保存在某个变量中。您可以将其保存在AppDelegate。在 AppDelegate.h 中创建属性或使用 NotificationCenter

您可以使用任何一个

@property (nonatomic, assign) float fontSize;

在您的字体大小控制页面中,在UISilder 的值更改方法中将浮点值分配给属性:

- (void)sliderValueChanged:(UISlider*)slider {
    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
    appDelegate.fontSize = // your result font size between 13-23
}

在其他 ViewController 的 viewWillAppear 方法中将字体分配给控件

- (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
     UIFont *font = [UIFont fontWithName:@"Helvetica" size:appDelegate.fontSize];  
     // If you have different font family for all controls than you have to create different font object and assign but font size can be accessed from appDelegate.fontSize
     yourAllLabels.font = font;
     yourAllTextFields.font = font;
     yourAllButtons.titleLabel.font = font;
}

或者

在每个 ViewController 的 viewDidLoad 方法中可以注册一个观察者:

- (void)viewDidLoad {
      [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fontSizeDidChanged:) name:@"fontSizeChanged" object:nil];
}

- (void)fontSizeDidChanged:(NSNotification*)notification {
   float fontSize = [[notification object] floatValue];
   UIFont *font = [UIFont fontWithName:@"Helvetica" size:fontSize];  
     yourAllLabels.font = font;
     yourAllTextFields.font = font;
     yourAllButtons.titleLabel.font = font;

}

- (void)sliderValueChanged:(UISlider*)slider {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"fontSizeChanged" object:[NSNumber numberWithFloat:yourFloatFontSize]];
}

还有很多其他方法可以存储字体大小或存储字体(如果所有字体家族都具有相同的字体)。您可以将字体或字体大小存储在 NSUSerDefaults 而不是 AppDelegate 中,这一切都由您自己决定。

希望这会有所帮助。

【讨论】:

  • 当用户滑动滑块时,您可能需要一些 KVO 来自动更改屏幕上的可见字体。
  • @Milo 还有一个NSNotificationCenter 选项也可以实现
【解决方案2】:

使用单例设计模式,将此值保存在单例类中并使用其共享实例访问它。查看this url 并了解如何使用someproperty

例子:

//Set
MyManager *sharedManager = [MyManager sharedManager];
sharedManager.someproperty = @"abc";

和:

//Get
MyManager *sharedManager = [MyManager sharedManager];
NSLog(@"%@",sharedManager.someproperty);

【讨论】:

    猜你喜欢
    • 2018-01-07
    • 2012-06-30
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 2015-05-20
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多