ModalViewController для одного подпредставления - PullRequest
0 голосов
/ 24 июня 2011

Хорошо, так что терпите меня: поскольку это вопрос, связанный с Objective-C, очевидно, много кода и подклассов.Так вот моя проблема.Прямо сейчас у меня есть приложение для iPad, которое программно создает кнопку и два цветных UIViews.Эти цветные UIViews управляются SubViewControllers, и все это находится в UIView, управляемом MainViewController.(т.е. MainViewController = [UIButton, SubViewController, SubViewController])

Теперь все это происходит так, как должно, и я получаю то, что ожидаю (ниже):

viewtools

Однако, когда я нажимаю кнопку, и на консоли отображается «flipSubView1», ничего не происходит.Никакое модальное представление не показывается, и никаких ошибок не происходит.Совсем ничего.Я ожидаю, что либо subView1, либо весь вид будет перевернут горизонтально и покажет subView3.Есть ли какой-то код, который мне не хватает, который может вызвать это / есть какая-то ошибка, которую я пропускаю?

viewtoolsAppDelegate.m

@implementation viewtoolsAppDelegate

@synthesize window = _window;
@synthesize mvc;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    mvc = [[MainViewController alloc] initWithFrame:self.window.frame];
    [self.window addSubview:mvc.theView];
    [self.window makeKeyAndVisible];

    return YES;
}

MainViewController.m

@implementation MainViewController

@synthesize theView;
@synthesize subView1, subView2, subView3;

- (id)initWithFrame:(CGRect) frame
{
    theView = [[UIView alloc] initWithFrame:frame];
    CGRect sV1Rect = CGRectMake(frame.origin.x+44, frame.origin.y, frame.size.width-44, frame.size.height/2);
    CGRect sV2Rect = CGRectMake(frame.origin.x+44, frame.origin.y+frame.size.height/2, frame.size.width-44, frame.size.height/2);
    subView1 = [[SubViewController alloc] initWithFrame:sV1Rect andColor:[UIColor blueColor]];
    subView2 = [[SubViewController alloc] initWithFrame:sV2Rect andColor:[UIColor greenColor]];
    subView3 = [[SubViewController alloc] initWithFrame:sV1Rect andColor:[UIColor redColor]];
    [theView addSubview:subView1.theView];
    [theView addSubview:subView2.theView];

    UIButton *aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [aButton addTarget:self action:@selector(flipSubView1:) forControlEvents:(UIControlEvents)UIControlEventTouchDown];
    [aButton setFrame:CGRectMake(0, 0, 44, frame.size.height)];
    [theView addSubview:aButton];

    return self;
}

- (void)flipSubView1:(id) sender
{
    NSLog(@"flipSubView1");
    [subView3 setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
    [subView1 presentModalViewController:subView3 animated:YES];
}

SubViewController.m

@implementation SubViewController

@synthesize theView;

- (id)initWithFrame:(CGRect)frame andColor:(UIColor *)color
{
    theView = [[UIView alloc] initWithFrame:frame];
    theView.backgroundColor = color;
    return self;
}

TLDR: модальное представление не работает.должен увидеть флип.нет.

1 Ответ

0 голосов
/ 24 июня 2011

Не похоже, что вы устанавливаете свойство 'view' в MainViewController где-либо, просто 'theView'. Представитель контроллера должен быть подключен к корневому представлению, которое он отображает, для правильной работы. Вам нужно будет исправить это также и на дополнительном контроллере представления. Если вы хотите, чтобы все соединения, которые несут классы фреймворка, нужно было настроить так, как они ожидают.

Кроме того, вы вызываете presentModalViewController на одном из контроллеров подчиненного представления; замените его так, чтобы оно вызывало [self presentModalViewController: ...], поскольку MainViewController - это тот, который будет «владеть» модальным представлением.

Я думаю, что если вы исправите эти точки, вы обнаружите, что -presentModalViewController будет работать.

...