FlipsideViewController

FlipsideViewController

我有一个来自标准模板的iPhone实用程序应用程序,因此我有被初始化并称为o​​jit_code的MainViewControllerFlipsideViewController。在controller. xib中,我有一个名为controller'sUISwitch和一个名为pathSwitchUISegmentedControl,它们是插座(并已连接!)。 locationSelector方法,我执行以下操作:

[编辑]添加showInfo:(id)sender的界面
[EDIT 2]更新了界面以显示添加的属性

- (IBAction)showInfo:(id)sender {
    ALog(@"method begin...");
    FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideView" bundle:nil];
    DLog(@">sun path visible = %@, setting flip side controller switch", sunPathIsVisible ? @"YES" : @"NO");
    // deleted -> [controller.pathSwitch setOn:sunPathIsVisible];
    controller.sunPathIsVisible = sunPathIsVisible; // added this
    DLog(@">location mode is %d, setting flip side controller segment index to %d - 1 = %d", locationMode, locationMode, locationMode - 1);
    // deleted -> controller.locationSelector.selectedSegmentIndex = locationMode - 1;
    controller.delegate = self;
    controller.locationMode = locationMode; // added this
    controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:controller animated:YES];
    [controller release];
}
@interface FlipsideViewController : UIViewController {
    id <FlipsideViewControllerDelegate> delegate;
    int locationMode; // added this
    UISegmentedControl *locationSelector;
    BOOL sunPathIsVisible;
    UISwitch *pathSwitch;
}

@property (nonatomic, assign) id <FlipsideViewControllerDelegate> delegate;
@property int locationMode; // added this
@property (nonatomic, retain) IBOutlet UISegmentedControl *locationSelector;
@property BOOL sunPathIsVisible; // added this
@property (nonatomic, retain) IBOutlet UISwitch *pathSwitch;;

- (IBAction)done:(id)sender;
- (IBAction)cancel:(id)sender;

@end

// There's also the `protocol` stuff, but I left that out here...

问题在于控件不接受其值,并且始终显示段0和OFF。如果我使用controller... controller's方法设置其属性,则它们的确显示正确的设置。

执行此操作时,viewWillAppear是否未完全加载?

最佳答案

你也许是对的。最干净的方法是将一些属性添加到FlipsideViewController,然后进行设置。然后,让viewWillAppear使用这些属性设置实际的开关。

这还将把FlipsideViewController的UI布局问题放在它们所属的位置,即FlipsideViewController中,而不是在可能使用它的任何其他控制器中。 (即,如果您决定不使用开关而是使用某种按钮,则可以更改FlipsideViewController,而不必查看其他代码)

编辑

一些澄清。尝试在相关位置的这些行中向FlipsideViewController添加属性:

BOOL switchState;
NSInteger locationMode;

@property (nonatomic,assign) BOOL switchState;
@property (nonatomic,assign) NSInteger locationMode;

@synthesize switchState;
@synthesize locationMode;

然后,在您当前的-(IBAction)showInfo:(id)sender中,您可以说:
FlipsideViewController *controller = [[FlipsideViewController alloc]
                                         initWithNibName:@"FlipsideView" bundle:nil];
controller.switchState = sunPathIsVisible;
controller.locationMode = locationMode;
controller.delegate = self;
// etc etc

然后,在FlipsideViewController中,在viewDidLoad中,放置开关值的实际处理:
[self.pathSwitch setOn:self.sunPathIsVisible];
[self.locationSelector setSelectedSegmentIndex:self.locationMode];

这将a)解决您的问题,b)分开您对用户界面的关注。如果您决定更改FlipsideViewController的布局,则无需更改FlipsideViewController以外的任何代码。

还有其他方法可以做到这一点,例如通过让您的viewDidLoad从其委托中获取值,如下所示:
[self.pathSwitch setOn:[delegate pathSwitch]];

根据您的情况,可能会更好。一般来说,我总是会选择最后一种方法,因为它可以防止不同视图控制器之间的同步问题。

关于iphone - 无法在FlipsideViewController中设置UISwitch,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5327700/

10-11 07:48