gpt4 book ai didi

iphone - 在 FlipsideViewController 中设置 UISwitch 时遇到问题

转载 作者:行者123 更新时间:2023-12-01 19:28:08 24 4
gpt4 key购买 nike

我有一个来自标准模板的 iPhone 实用程序,所以我有 MainViewControllerFlipsideViewController被初始化并调用 controller.controller's xib 我有一个 UISwitch调用pathSwitchUISegmentedControl调用locationSelector那是网点(并且已经连接!)当我调用 showInfo:(id)sender方法,我执行以下操作:

[编辑] 添加 controller... 的接口(interface)
[编辑 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's 中设置它们的属性 viewWillAppear方法,它们确实显示了正确的设置。

controller当我这样做或其他事情时没有完全加载?

最佳答案

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

这也会把 FlipsideViewController 的 UI 布局问题它们所属的位置,即 FlipsideViewController而不是在任何其他可能使用它的 Controller 中。 (即,如果您决定不使用开关而是使用某种按钮,则可以更改 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从其委托(delegate)中获取值,如下所示:
[self.pathSwitch setOn:[delegate pathSwitch]];

这可能会更好,这取决于您的情况。一般来说,我总是更喜欢最后一种方法,因为它可以防止不同 View Controller 之间的同步问题。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com