在另一个类中从UIView更改为UIView

时间:2012-02-07 09:28:57

标签: objective-c uiview

这是我遇到的一个小问题。我不太擅长以编程方式更改视图,但这就是我所拥有的:

//(.h)


#import <UIKit/UIKit.h>
#import "Detail.h"

@interface List : UIViewController <UITableViewDelegate, UITableViewDataSource>
{

}

@property (retain, nonatomic) IBOutlet UITableView *tableView;
@property (retain, nonatomic) Detail *detail;
@end

//(.m)
@synthesize detail=_detail;

- (Detail *)detail
{
    NSLog(@"Detail UIView construction started.");
    if (_detail != nil)
    {
        return _detail;
    }

    Detail *aDetailView = [[Detail alloc] init];
    _detail = aDetailView;


    [self.view addSubview:_detail.view];
    //I never really set it to setHidden:YES, but just to make sure I'm setting it NO here.
    [_detail.view setHidden:NO];
    return _detail;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [UIView transitionFromView:self.view toView:self.detail.view duration:1 options:UIViewAnimationOptionTransitionFlipFromRight completion:nil];
}

作为输出:

2012-02-07 11:17:51.909 TodoApp[4232:fb03] Detail UIView construction started.

该视图似乎可以很好地完成FlipFromRight动画,但屏幕完全是黑色的。 正如我所说,我不擅长以编程方式改变观点。

感谢您的帮助!

============= 回答我自己的问题。

这真是太愚蠢了。标题栏中的“后退”按钮具有不受支持的配置。所以View不想加载......现在修复它。

3 个答案:

答案 0 :(得分:0)

- (Detail *)detail
{
NSLog(@"Detail UIView construction started.");
if (_detail != nil)
{
    return _detail;
}

Detail *aDetailView = [[Detail alloc] init];
[self.view addSubview:aDetailView.view];
//I never really set it to setHidden:YES, but just to make sure I'm setting it NO here.
[aDetailView.view setHidden:NO];
_detail = aDetailView;

return _detail;
}

进行这些更改并让我知道结果..

答案 1 :(得分:0)

在将其添加到superview之前返回_detail

所以添加这一行

return _detail;

此行后[self.view addSubview:_detail.view];

像这样

[self.view addSubview:_detail.view];

[_detail.view setHidden:NO];

return _detail;

答案 2 :(得分:0)

回答我自己的问题。

这真是太愚蠢了。标题栏中的“后退”按钮具有不受支持的配置。所以View不想加载......现在修复它。