2016-12-22 1 views
0

UITableView의 여러 인스턴스를 만들고 싶습니다. 내보기 컨트롤러에서 tabbar 및 각 tabbar 항목에서 웹 서비스에서 오는 데이터 테이블보기를로드 할 수 있습니다. 스토리 보드를 사용하여 Tableview를 만들었습니다.UitableView의 여러 인스턴스를 만드는 방법은 무엇입니까?

  1. 테이블보기의 각 인스턴스마다 다른 데이터가 전달됩니다.
  2. uitabbaritem 클릭시 해당 tabbleview 인스턴스가 다시로드되어야합니다.

UITabBarController를 사용하고 싶지 않습니다. 모두 내가하고 싶은 단일보기 컨트롤러와 단일 tableview를 사용하는 것입니다.

또한 내 접근 방식과 혼동 스럽습니다. 내가 필요로하는 모든 것이 tableview를 업데이트하는 것만으로 단일 뷰 컨트롤러를 사용하는 것이 좋습니까? 제 생각에는 UItabbarcontroller를 사용하는 것은 불필요합니다.

+2

@VladHatko 음, 동일한 테이블 뷰를 사용하여 두 세트의 데이터 그것으로. – JAL

+0

@Rohit palod 여러 tableView를 만들면 메모리가 둘 이상이라고 생각해야합니다. 하나의 tableView를 사용하면 항목을 전환 할 때 여러 개의 dataSources를로드 할 수 있습니다. 여러 tableView를 사용하여 추천하지 않습니다,하지만 당신은 또한 귀하의 요구 사항을 relize하기 위해 isHidden을 설정할 수 있습니다. – aircraft

+0

TableViews는 UI 요소입니다. 당신은'UITableViewDataSource'를 사용하여 테이블에 대한 데이터와 커스터마이징을 제공한다. 두 화면이 tableView에서 사용하는 데이터 바깥에서 모두 똑같다면 테이블 하나를 사용하고 테이블이 사용하는 데이터를 조작해야합니다. – Connor

답변

0

귀하의 요구 사항에 따라. 탭 막대의 가장 좋은 사용 예는 여러 인스턴스를 동시에 처리하고 유지 관리하는 것입니다. 당신이 식사 응용 프로그램에서 일하는 것과 같은 상황을 상상해보십시오. 각 탭에 대해 tableview에로드 된 여러 옵션을 표시해야합니다. 모든 탭은 테이블 뷰의 다른 상태를 유지합니다. 단일보기 컨트롤러에서 유지 관리하는 작업으로 새 데이터를 그림으로 가져 오려면 이전 데이터를 새로 고치고 바꿔야합니다. 여기서는 테이블 뷰 데이터를로드 할 때마다 필요합니다. 그래서, 귀하의 요구 사항에 따라 탭 막대를 사용하거나 생각에 따라. 한 번에 여러 테이블 뷰의 다른 상태를 유지하지 않으려면 singleView Controller 및 Single Tableview로 이동하십시오.

+0

나는 @ConnorNeville의 의견에 대한 회신에서 언급했다. 여러 테이블에 대해 동일한 테이블을 사용하는 것이 좋지 않다는 것을 알고 있습니다. 매번 테이블을 다시로드해야합니다. 그 이유는 내가 여러 인스턴스에 대한 하나의 탭에서 다른 테이블로 다시로드하지 않아도 이동 이동 요청. –

0

UITableView의 인스턴스를 하나만 유지 관리하고 탭 표시 줄을 사용하여 사용할 데이터 소스를 결정할 수 있습니다. 다음은 작업 표시 줄 컨트롤러의 탭 모음과 단일 tableview를 포함하는 스토리 보드의보기 컨트롤러 설정 예제입니다.

#import "ViewController.h" 

@interface ViewController() <UITableViewDataSource, UITabBarDelegate> 

@property(weak,nonatomic) IBOutlet UITableView *tableView; 
@property(weak,nonatomic) IBOutlet UITabBar *tabBar; 
@property(strong,nonatomic) NSArray *model; 

@end 

우리 모델은 탭 모음의 각 탭마다 하나씩 3 개의 배열입니다. 이 배열은 여기서 하드 코드 초기화되지만 웹 서비스에서 초기화 될 수 있습니다 ...

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSArray *dataSource0 = @[ @"A", @"B", @"C" ]; 
    NSArray *dataSource1 = @[ @"1", @"2", @"3"]; 
    NSArray *dataSource2 = @[ @"doh", @"ray", @"me"]; 
    self.model = @[ dataSource0, dataSource1, dataSource2 ]; 

    self.tabBar.selectedItem = self.tabBar.items[0]; 
} 

// the user pressed a tab, reload the table 
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { 
    [self.tableView reloadData]; 
} 

// this is an important part: our data for the table is determined by 
// which tab is selected, return of the arrays, corresponding to the selection 
- (NSArray *)currentDataSource { 
    UITabBarItem *item = self.tabBar.selectedItem; 
    NSInteger index = [self.tabBar.items indexOfObject:item]; 
    return self.model[index]; 
} 

// these datasource methods always refer to the currentDataSource 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [self currentDataSource].count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 
    NSString *text = [self currentDataSource][indexPath.row]; 
    cell.textLabel.text = text; 
    return cell; 
} 

@end 
+0

감사합니다. 그러나 그것은 나를 도와주지 않을 것입니다. 한 탭에서 다른 탭으로 이동할 때마다 테이블을 새로 고침하고 싶지 않습니다. 그것은 시간이 걸리고 사용자는 절대로 그것을 감사하지 않을 것입니다. –

+0

이제 나는 왜 당신이 질문을했는지 이해합니다 : 당신은 테이블을 다시로드한다는 의미를 오해했습니다. 데이터를 다시 가져 오는 것은 아닙니다. 보이는 셀을 다시 그려야한다는 뜻입니다.사용자는 그것을 볼 수 없습니다. 동영상의 한 프레임만큼 시간이 오래 걸립니다. vc가 나타나면 (또는 전에) 데이터를 가져옵니다. 하나의 실행 루프 사이클에서 테이블 내용 변경 및 다시 그리기가 발생합니다. – danh

관련 문제