Через некоторое время я наконец-то снова начал работать с Objective-C, пока над моим единственным законченным приложением. Цель состоит в том, чтобы в конечном итоге провести рефакторинг для ARC и, возможно, раскадровок, но пока я полирую цель iOS 4.x. Я довольно ржавый, так что держи меня в покое, если это глупый вопрос.
У меня на главном экране есть кнопка, которая вызывает метод showAction. Метод заключается в следующем:
- (void)showAbout
{
AboutViewController *aboutView = [[[AboutViewController alloc] init] autorelease];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
aboutView.modalPresentationStyle = UIModalPresentationFormSheet;
}
else
{
aboutView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
}
[self presentModalViewController:aboutView animated:YES];
}
Класс AboutViewController имеет это .h:
@interface AboutViewController : UIViewController <UIActionSheetDelegate, MFMailComposeViewControllerDelegate> {
}
- (IBAction)dismiss:(UIButton *)sender;
- (IBAction)feedback:(UIButton *)sender;
@property (retain) IBOutlet UIButton *dismissButton;
@property (retain) IBOutlet UIButton *feedbackButton;
@property (retain) IBOutlet UIImageView *background;
@property (retain) IBOutlet UITextView *textView;
@end
и все было правильно подключено в файле .xib (то же самое для iPhone и iPad). Действия запускаются, как и ожидалось, и розетки доступны, но только на iPhone. При работе на iPad только textView правильно инициализируется, а все остальное указывает на ноль.
В .m я пробовал это:
@implementation AboutViewController
@synthesize dismissButton = _dismissButton;
@synthesize feedbackButton = _feedbackButton;
@synthesize background = _background;
@synthesize textView = _textView;
// ...
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSLog(@"obj self.dismiss: %@", self.dismissButton);
NSLog(@"frame dismiss: %@", NSStringFromCGRect(self.dismissButton.frame));
}
На iPhone я получаю это:
2012-02-08 22:51:00.341 myapp[17290:207] obj self.dismiss: <UIButton: 0x70281d0; frame = (180 410; 120 30); opaque = NO; autoresize = LM+W+RM+TM; layer = <CALayer: 0x7028260>>
2012-02-08 22:51:00.342 myapp[17290:207] frame dismiss: {{180, 410}, {120, 30}}
На iPad вместо этого я получаю:
2012-02-08 22:51:40.428 myapp[17320:207] obj self.dismiss: (null)
2012-02-08 22:51:40.428 myapp[17320:207] frame dismiss: {{0, 0}, {0, 0}}
Больше ничего не происходит в зависимости от идиомы пользовательского интерфейса, и я действительно смущен этим. Как будто на iPad выходы для чего-либо кроме textView не установлены, даже если они правильно связаны в файле .xib. В viewWillAppear self.textView работает, как и ожидалось, также на iPad. Я также попытался сделать это в viewDidLoad, который должен вызываться перед viewWillAppear, если я не ошибаюсь, и даже в методе dismiss :, но они просто никогда не доступны.
Причина, по которой мне нужен доступ к фреймам кнопок, заключается в том, что представление about относительно сложное и не может автоматически переместить свои подпредставления. Единственное, что мне нужно сделать, это сделать кнопки шире на большом модальном виде на iPad.
Любые советы будут с благодарностью!
Заранее спасибо.