문제

이것은 이전에 묻는 질문과 관련이 있지만 원래 질문에 답변되었습니다. 새로운 질문을 열어주지 않기를 바랍니다. 그렇지 않다면 자유롭게 삭제하십시오.

TableViews와 Tabbar를 사용하여 간단한 iPhone 응용 프로그램을 구축하려고합니다. 제목과 표시가 필요한 데이터의 종류를 제외하고는 모든보기가 프로그래밍 방식으로 동일합니다. 그것들을 제외하고 그들은 모두 똑같이 행동합니다.

내 AppDelegate의 현재 코드는 ViewControllers의 분포를 다른 탭에 처리하고 그에 따라 제목을 설정합니다. 그러나 내가 알 수없는 것은 특정 객체 배열 (모든 배열 당 탭마다 다름)을 각 분산 뷰 컨트롤러에 전달하여 테이블 뷰에서 사용하는 방법입니다.

당신이 나를 도울 수 있기를 바랍니다. 내 코드는 다음과 같습니다.

AppDelegate.h

#import <UIKit/UIKit.h>

@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
  UIWindow *window;
  UITabBarController *tabBarController;
}

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

@end

AppDelegate.m

#import "RootViewController.h"
#import "MyAppDelegate.h"

@implementation MyAppDelegate.h

@synthesize window, tabBarController;

- (void)applicationDidFinishLaunching:(UIApplication *)application {
  NSDictionary *row1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"1", @"Id", 
                    @"My Name", @"Name", 
                    @"My Type", @"Type",
                    @"My Meta", @"Meta",
                    @"My Excerpt Text", @"Excerpt",
                    @"My Body Text", @"Body",
                    @"icon.jpg", @"Icon", 
                    @"image.jpg", @"Image", nil];

  NSArray *array = [[NSArray alloc] initWithObjects:row1, nil];
  self.events = array;

  NSArray *tableControllersConfig = [NSArray arrayWithObjects:
                                 [NSDictionary dictionaryWithObjectsAndKeys:@"test1", @"DataSource", @"Title of the Tableview", @"Title", @"icon.png", @"Icon", nil],

  NSMutableArray *tableControllers = [NSMutableArray array];
  for (NSDictionary *configDict in tableControllersConfig) {
    RootViewController *controller = [[RootViewController alloc] initWithNibName:@"TableView" bundle:nil];
    controller.tableView.delegate = controller;
    controller.title = [configDict valueForKey:@"Title"];
    controller.tabBarItem.image = [UIImage imageNamed: [configDict valueForKey:@"Icon"]];
    [tableControllers addObject:controller];
    [controller release];
  }

  self.tabBarController.viewControllers = [NSArray arrayWithArray:tableControllers];
  [window addSubview:tabBarController.view];
  [row1 release];
  [array release];
}

- (void)dealloc {
    [tabBarController release];
    [window release];
    [super dealloc];
}
@end

rootViewController는 uitableviewdatasource 프로토콜을 구현합니다.

도움이 되었습니까?

해결책

"rootViewController"가 TableView의 데이터 소스 인 경우 (UitableViewDatasource 프로토콜을 구현)

RootViewController 클래스에서 NSARRAY IVAR을 만듭니다.

이 IVAR에 보유 할 배열을 포함 할 새 Init 메소드를 만듭니다.

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil tableDataSource:(NSArray*)tableData {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
    // Custom initialization
    tableDataArray = [tableData retain];

}
return self;

}

TableView의 데이터 소스 방법에서 tableDataArray를 사용하십시오.

그런 다음 루프에서 rootViewController를 만들 때 새로운 INIT 메소드로 tableDataArray를 설정할 수 있으며 각 테이블 뷰를 다른 배열로 채울 수 있습니다.

도움이 되었기를 바랍니다

다른 팁

답은 디자인에 따라 다릅니다.

말하는 데이터가 실행에서 실행 중 동일하게 유지되면 TableViews의 기본 구성의 일부이므로 해당 데이터를 View Controller에 주차해야합니다.

데이터가 초과 근무를 발전 시키면 앱 대의원에 넣은 다음 해당 데이터에 대한 포인터가있는 사용자 정의보기 컨트롤러 서브 클래스를 사용해야합니다. 핵심 데이터를 사용하는 Xcode의 템플릿 프로젝트 중 하나를보십시오. 클래스 간의 관계는 필요한 것과 동일하지만 관리되는 객체 컨텍스트 대신 배열을 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top