我刚开始学习如何开发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
答案 0 :(得分:0)
所以你在另一个屏幕(s1)的顶部添加一个屏幕(s2),因此你无法访问s1。您需要将s2和s1的大小设置得更小,以便它们不占用整个屏幕尺寸。
另外,通过说makeKeyAndVisible,您可以使窗口可见并且能够接受用户交互。没必要说两次。
答案 1 :(得分:0)
您可能希望使用视图配置视图控制器,然后再打开两个开关。您是否了解MVC模式:https://developer.apple.com/library/ios/#documentation/General/Conceptual/DevPedia-CocoaCore/MVC.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。