Xcode / iPhone:第一个基于Windows的应用程序 - 为什么TabBarController视图中没有显示任何内容

时间:2011-06-25 03:19:17

标签: iphone xcode uiviewcontroller uiscrollview tabbarcontroller

使用基于Windows的模板时是否需要记住一些内容?因为我不清楚标签显示的原因,但视图中没有任何内容显示出来。

你可以帮忙吗?因为我现在一直在搜索以前的问题几个小时,但我仍然没有找到任何清除它的内容。

AnotherMadeUpAppDelegate.h

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

@interface AnotherMadeUpAppDelegate : NSObject <UIApplicationDelegate> {

}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@end

AnotherMadeUpAppDelegate.m

#import "AnotherMadeUpAppDelegate.h"

@implementation AnotherMadeUpAppDelegate


@synthesize window=_window;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    UIViewController *vc1 = [[UIViewController alloc] init];
    UIViewController *vc2 = [[UIViewController alloc] init];
    AnotherMadeUpViewController *vc3 = [[AnotherMadeUpViewController alloc] init];

    UITabBarController *tbc = [[UITabBarController alloc] init];
    tbc.viewControllers = [NSArray arrayWithObjects:vc1, vc2, vc3, nil];
    [vc1 release];
    [vc2 release];
    [vc3 release];

    [self.window addSubview:tbc.view];
    [self.window makeKeyAndVisible];
    return YES;
}
...
@end

AnotherMadeUpViewController.h

#import <UIKit/UIKit.h>

@interface AnotherMadeUpViewController : UIViewController<UIScrollViewDelegate>
{

    IBOutlet UIPageControl *pageControl;
    IBOutlet UIScrollView *scroller;
    IBOutlet UILabel *label;
}

@property (nonatomic,retain)IBOutlet UIPageControl *pageControl;
@property (nonatomic,retain)IBOutlet UIScrollView *scroller;
@property (nonatomic,retain)IBOutlet UILabel *label;

-(IBAction)clickPageControl:(id)sender;

@end

AnotherMadeUpViewController.m

#import "AnotherMadeUpViewController.h"

@implementation AnotherMadeUpViewController
@synthesize pageControl,scroller,label;

-(IBAction)clickPageControl:(id)sender
{
    int page=pageControl.currentPage;
    CGRect frame=scroller.frame;
    frame.origin.x = frame.size.width * page;
    frame.origin.y = 0;
    [scroller scrollRectToVisible:frame animated:YES];
}

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    int page = scrollView.contentOffset.x/scrollView.frame.size.width;
    pageControl.currentPage=page;
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)dealloc
{
    [super dealloc];
    [label release];
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    scroller.pagingEnabled=YES;
    CGFloat labelOriginX = label.frame.origin.x;
    CGFloat labelOriginY = label.frame.origin.y;
    CGFloat scrollWidth = 0;
    int pageNumber = 0;
    for (int i=0; i<9; i++)
    {
        CGRect rect = label.frame;
        rect.size.height = label.frame.size.height;
        rect.size.width = label.frame.size.width;
        rect.origin.x = labelOriginX + scrollWidth;
        rect.origin.y = labelOriginY;
        label.frame = rect;
        label.text = [NSString stringWithFormat:@"%d", pageNumber];
        label.textColor = [UIColor redColor];
        [scroller addSubview:label];
        pageNumber++;
        scrollWidth += scroller.frame.size.width;
    }
    scroller.delegate=self;
    scroller.directionalLockEnabled=YES;
    scroller.showsHorizontalScrollIndicator=NO;
    scroller.showsVerticalScrollIndicator=NO;
    pageControl.numberOfPages=9;
    pageControl.currentPage=0;
    scroller.contentSize=CGSizeMake(pageControl.numberOfPages*self.view.frame.size.width, self.view.frame.size.height);
    [self.view addSubview:scroller];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    [label release];
    self.label = nil;
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

2 个答案:

答案 0 :(得分:0)

剖析你的viewDidLoad -

scroller = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width,self.view.frame.size.height)];

您似乎在此处创建了一个新的滚动视图实例,但您已将声明为插座。如果您没有插座,请删除IBOutlet的{​​{1}}标记。如果你有一个并想要使用它,然后删除上面的行。更简单的方法是,

scroller

另一件事是您要创建10个标签,但不分配框架。要在不同的页面中显示其中一个,

scroller = [[UIScrollView alloc] initWithFrame:self.view.bounds];

然后将int pageNumber = 0; for (int i = 0; i < 10; i++) { UILabel *label = [[UILabel alloc] init]; [label sizeToFit]; label.center = CGPointMake (((2 * i + 1) * self.view.frame.size.width) / 2, self.view.frame.size.height / 2); label.text = [NSString stringWithFormat:@"%d", pageNumber]; [scroller addSubview:label]; [label release]; pageNumber++; } 设置为显示10页,

contentSize

答案 1 :(得分:0)

问题在于这一行

AnotherMadeUpViewController *vc3 = [[AnotherMadeUpViewController alloc] init];

您需要将其更改为

AnotherMadeUpViewController *vc3 = [[AnotherMadeUpViewController alloc] initWithNibName:@"AnotherMadeUpViewController" bundle:nil];

然后您的.xib将被加载并且您的插座将被连接。

不要忘记将您的商店连接到IB的文件所有者。