如何以编程方式创建默认滑块值?

时间:2015-06-09 21:12:40

标签: ios objective-c view uislider

"当前值"默认我在界面构建器中为我的滑块设置似乎完全被绕过,当我运行应用程序时,滑块从我上次运行应用程序时设置的位置开始。

我希望滑块从默认值开始并在切换到其他视图之前调用它们最后的位置。

以下是允许保存滑块值的代码:

viewController.m

#!/bin/bash
#--------------------------------------------------------------------
# Simple multi-MFP launcher script
# Karl Bishop <kfbishop@us.ibm.com>
#--------------------------------------------------------------------

#-- Set specific Java Runtime?
#export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home

#-- MFP Home directory for custom runtimes
MFP_HOME="${HOME}/dev/mobilefirst"

#-- Set specific Java Runtime
export PATH=$JAVA_HOME/bin:$PATH
echo "Using Java: ${JAVA_HOME}"

#-- Launch custom MFP
${MFP_HOME}/mobilefirst-cli/bin/mobilefirst-cli.js $@

谢谢!

4 个答案:

答案 0 :(得分:1)

只需将此[[NSUserDefaults standardUserDefaults]removeObjectForKey:@"YourKey"];添加为@psobko在AppDelegate中说:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"YourKey"];
    return YES;
}

答案 1 :(得分:0)

不要使用NSUserDefaults在视图之间存储值。这不是它的用途。只需将滑块值从一个视图传递到另一个视图即可。您可能需要在-prepareForSegue:sender:

中执行此操作

如果要在应用程序的全新启动之间保存和恢复值,请使用NSUserDefaults。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"ShowAnotherSlider"]) {
        DBAnotherViewController *destinationViewController = (DBAnotherViewController *)segue.destinationViewController;
        destinationViewController.sliderStartValue = self.slider.value;
    }
}

请注意,我在目标视图控制器上设置属性,而不是直接设置滑块值。

@property (nonatomic, strong) CGFloat sliderStartValue;

此时可能没有加载目标视图控制器的视图,因此slider属性为nil。改为设置此其他属性,然后在加载视图(-viewDidLoad)时,您可以使用该值更新滑块。

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.slider.value = self.sliderStartValue;
}

答案 2 :(得分:0)

当应用再次启动时,只需删除密钥的对象:

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"firstSliderValue"];

您可以在AppDelegate或其他任何有意义的地方执行此操作。

答案 3 :(得分:0)

正如Dave Batton所说,NSUserDefaults是针对该应用的全新发布的默认设置。如果我正确理解您的问题,在我看来您将覆盖firstSliderValueChange中的默认值。这就是为什么会发生这种情况:

  

滑块从我上次运行应用程序时设置的位置开始。

分别存储默认值和应用内值,或者在视图之间传递它们。

修改 您在下面的评论中提到的代码不会传递值。它坚持价值观。

问题:假设您最初设置了一个默认值为0的滑块值。当您第一次运行应用程序时,您会看到滑块位于0.现在您将滑块移动到,例如,5。然后调用此方法:

- (IBAction)firstSliderValueChange:(id)sender {
    [[NSUserDefaults standardUserDefaults] setFloat:[_firstSlider value] forKey:@"firstSliderValue"];
}

现在默认值不再是0.它是5.并且在应用程序启动之间持续存在,因为您使用的是NSUserDefaults。

解决方案:将动态滑块值保存在其他位置 - 而不是NSUserDefaults。由于您有多个视图控制器,因此有一种方法:

//viewController.m
@interface
@property (strong, nonatomic) IBOutlet UISlider *mySlider;
@end

-(void)prepareForSegue: (UIStoryboardSegue *)segue sender:(id)sender {
if([segue.identifier isEqualToString: @"segueIdentifer"]) {
    otherViewController *ovc = (otherViewController *)segue.destinationViewController;
    ovc.dynamicSliderValue = self.mySlider.value;
    }
}

//otherViewController.h
@interface
@property(assign) CGFloat dynamicSliderValue;
@end

现在,每当您切换回第一个视图控制器的视图时,只需访问此属性,然后相应地更新滑块。 注意 - 我确信还有很多其他方法可以做到这一点!