iPhone上的一个窗口中的两个开关

时间:2011-07-20 20:45:05

标签: iphone objective-c xcode uiview uiswitch

我刚开始学习如何开发iPhone应用程序。

我正在尝试使用两个开关制作应用。我做了两个班(Switch1& Switch2)。 首先,我用一个开关(Switch1)测试了应用程序,并且应用程序正常运行。但是当我创建第二个类(Switch2)和构建/运行应用程序时,第一个开关(Switch1)消失了,我看到的只是第二个开关(Switch2)。

之后我制作了(Switch1& Switch2)celarColor的背景,我可以看到两个开关。但是,第一个开关(Switch1)无法切换。

所以我认为我的问题是如何让两个开关(Switch1和Switch2)在“窗口”中同时显示和工作

问题(可能是愚蠢的):我可以让它们同时显示和工作? 我认为以下代码中的问题:这是来自AppDelegate

UIScreen *s1 = [UIScreen mainScreen];
view1 = [[Switch1 alloc] initWithFrame: s1.applicationFrame];
window = [[UIWindow alloc] initWithFrame: s1.bounds];

[window addSubview: view1];
[window makeKeyAndVisible];


UIScreen *s2 = [UIScreen mainScreen];
view2 = [[Switch2 alloc] initWithFrame: s2.applicationFrame];
window = [[UIWindow alloc] initWithFrame: s2.bounds];

[window addSubview: view2];
[window makeKeyAndVisible];
return YES;

这是Switch1.h     #import

@interface Switch1 : UIView {
UISwitch *mySwitch1;

}

@property (nonatomic, retain) IBOutlet UISwitch *mySwitch1;

@end

这是Switch1.m

#import "Switch1.h"

@implementation Switch1
@synthesize mySwitch1;

- (id) initWithFrame: (CGRect) frame {
if ((self = [super initWithFrame: frame])) {
// Initialization code
self.backgroundColor = [UIColor clearColor];

mySwitch1 = [[UISwitch alloc] initWithFrame: CGRectZero];
if (mySwitch1 == nil) {
[self release];
return nil;
}

    mySwitch1.on = NO;  //the default

    [mySwitch1 addTarget: [UIApplication sharedApplication].delegate
                 action: @selector(valueChanged:)
       forControlEvents: UIControlEventValueChanged
     ];

CGRect b1 = self.bounds;

mySwitch1.transform = CGAffineTransformMakeScale(2, 2);
mySwitch1.center = CGPointMake(
b1.origin.x + b1.size.width / 2,
b1.origin.y + b1.size.height / 2
);

[self addSubview: mySwitch1];
}
return self;
}

/*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.
 - (void) drawRect: (CGRect) rect {
 // Drawing code
 }
 */

 - (void) dealloc {
[mySwitch1 release];
[super dealloc];
}

@end

3 个答案:

答案 0 :(得分:0)

所以你在另一个屏幕(s1)的顶部添加一个屏幕(s2),因此你无法访问s1。您需要将s2和s1的大小设置得更小,以便它们不占用整个屏幕尺寸。

另外,通过说makeKeyAndVisible,您可以使窗口可见并且能够接受用户交互。没必要说两次。

答案 1 :(得分:0)

您可能希望使用视图配置视图控制器,然后再打开两个开关。您是否了解MVC模式:https://developer.apple.com/library/ios/#documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html

这里是视图控制器指南:https://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html

当您使用UIScreen进行初始化时,您将使两个开关的大小相同(窗口大小),因此开关2在开关1之上,因为它已经初始化为秒。

答案 2 :(得分:0)

您在拨打电话时重置窗口

window = [[UIWindow alloc] initWithFrame: s2.bounds];

s1不再存在,因为你已经在它上面创建了一个新窗口。你可以做到

UIScreen *s1 = [UIScreen mainScreen];
window = [[UIWindow alloc] initWithFrame: s1.bounds];

view1 = [[Switch1 alloc] initWithFrame: s1.applicationFrame];
view2 = [[Switch2 alloc] initWithFrame: s2.applicationFrame];

[window addSubview: view1];
[window addSubview: view2];

[window makeKeyAndVisible];

return YES;

如果您刚刚开始,请务必在iPhone开发中查看此tutorial。它展示了如何使用UIViewController,UIView以及许多为iPhone提供的类,如UITableView和UIImageView。