Два переключателя в окне на iPhone - PullRequest
0 голосов
/ 21 июля 2011

Я только начал изучать, как разработать приложение для 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 голосов
/ 21 июля 2011

Возможно, вы захотите настроить контроллер представления с представлением, а затем сначала включить два переключателя. Вы понимаете шаблоны 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, поскольку он инициализируется секунда.

0 голосов
/ 21 июля 2011

Вы сбрасываете окно при вызове

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 dev. В нем показано, как использовать UIViewController, UIView и множество поставляемых классов для iPhone, таких как UITableView и UIImageView.

0 голосов
/ 21 июля 2011

Таким образом, вы добавляете один экран (s2) поверх другого экрана (s1) и, следовательно, у вас нет доступа к s1. Вам нужно уменьшить размер s2 и s1, чтобы они не занимали весь экран.

Также, говоря makeKeyAndVisible, вы делаете окно видимым и можете принимать взаимодействие с пользователем. Не нужно говорить это дважды.

...