方法不要改变变量的值

时间:2014-11-26 16:13:36

标签: ios objective-c

首先,对不起这个问题,但我是iOS开发的新手,我整个下午都停留在这,我正在尝试使用位于另一个viewController中的一个滑块来更改int变量的值。

该行的滑块位于视图内的模态窗口中,我认为这是问题,但我不知道。

这是代码:

@interface ViewController ()
  @property int row, column, actualGame;
@end

- (IBAction)rowChanged:(id)sender {
    UISlider *slider = (UISlider *)sender;
    int val = slider.value;
    [self setRow: val];
    self.rowLabel.text = [NSString stringWithFormat:@"%d",val];
} 

- (IBAction)columnChanged:(id)sender {
    UISlider *slider = (UISlider *)sender;
    int val = slider.value;
    _column = val;
    self.collumLabel.text = [NSString stringWithFormat:@"%d",val];
}

1 个答案:

答案 0 :(得分:1)

为了在视图控制器之间传递数据,您可以使用几种不同的选项。最简单的方法是在第二个视图控制器上存储对第一个视图控制器的引用。您可以在第一个视图控制器的`prepareForSegue'方法中设置属性。

FirstViewController.h(呈现模态VC的视图控制器):

#import <UIKit/UIKit.h>

@interface FirstViewController : UIViewController

@property (nonatomic) float sliderValue;

@end

FirstViewController.m

#import "FirstViewController.h"
#import "ViewController.h"

@implementation FirstViewController

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"mySegueDefinedInStoryboard"]) {
        ViewController *destinationViewController = (ViewController *)segue.destinationViewController;
        destinationViewController.firstViewController = self;
    }
}

@end

ViewController.h(模态视图控制器):

#import <UIKit/UIKit.h>

@class FirstViewController;

@interface ViewController : UITableViewController

@property (nonatomic, weak) FirstViewController *firstViewController;

@end

ViewController.m

#import "ViewController.h"
#import "FirstViewController.h"

@implementation ViewController

- (IBAction)columnChanged:(UISlider *)sender {
    float value = sender.value;
    self.firstViewController.sliderValue = value;
}

@end

这种方法的缺点是它创建了紧密耦合的代码--ViewController需要了解FirstViewController,这不是最佳的。一旦你练习了一点,你将学习如何创建自己的委托,这样你就可以向其他视图控制器发送消息,而无需关心他们的课程或他们的属性。

Apple Documentation on the Delegate Pattern