2013-06-28 25 views
1

如何根據特定條件動態更改表視圖中顯示的行數。如何更改動態顯示在nstableview中的行數

我有一個要求,需要表視圖不顯示任何空行或空白。

如何做到這一點?

Thnx提前。

@implementation AppDelegate 

@synthesize searchField; 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
// Insert code here to initialize your application 

} 


-(id)init 
{ 
self = [super init]; 
if (nil!= self) 
{ 
_arrayContents= [[NSMutableArray alloc] initWithObjects:@"a",@"as",@"sd",@"dfg",@"fh",@"sdf",@"ret",@"sdf",@"dsfxc",@"awert",@"xsdfcvg", nil]; 
_searchedArrayContents = [NSMutableArray arrayWithCapacity:[_arrayContents count]]; 

_menuArray = [[NSMutableArray alloc] initWithObjects:@"123",@"1231234",@"235435",@"5345345", nil]; 
} 
    return self; 
} 

-(void)awakeFromNib 
{ 
// [_menuTableView setHidden:YES]; 
// [[[_menuTableView superview] superview] setHidden:YES]; 

[[[_menuTableView superview] superview] setFrame:NSMakeRect(100, 0, 234, 1000)]; 
[[_menuTableView superview] setFrame:NSMakeRect(0, 0, 234, 1000)]; 

[_menuTableView setFrame:NSMakeRect(0, 0, 234, 1000)]; 
} 

- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView 
{ 

if (aTableView==_menuTableView) 
{ 
    return [_menuArray count]; 
} 


if ([[searchField stringValue] length]>0 || [[_tokenField stringValue] length]>0 || [[_textField stringValue] length]>0) 
{ 
    return [_searchedArrayContents count]; 
} 
if (aTableView==_tableView) 
{ 
    return [_arrayContents count]; 
} 
return 0; 
} 

- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn   *)aTableColumn row:(NSInteger)rowIndex 
{ 

if (aTableView==_menuTableView) 
{ 
    return [_menuArray objectAtIndex:rowIndex]; 
} 

if ([[searchField stringValue] length]>0 || [[_tokenField stringValue] length]>0) 
{ 
    return [_searchedArrayContents objectAtIndex:rowIndex]; 
} 

if (aTableView==_tableView) 
{ 
    return [_arrayContents objectAtIndex:rowIndex] ; 
} 
return nil; 
} 

我試圖在上面的代碼中動態改變TableView的框架位置。但它不改變框架。它仍處於我在Interface Builder中拖放的位置。

+0

您需要以編程方式更改NSTableView的數據源,你需要刷新表視圖每當源的變化。 – Ganapathy

+0

到目前爲止你做了什麼?如果你顯示了一些你的代碼,你不會混淆那些試圖幫助你的人。 –

+0

@Ganapathy:我正在相應地更改數據源。我的要求是我不想顯示錶視圖的未使用的行。它應該只顯示實際的號碼。存在於數據源中的元素,而不顯示任何空行。 –

回答

1

顯示的行數 -

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section   { 
return [nameArray count]; 

}

對於調整的tableView的高度 -

UITableView *automotiveTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 400) style:UITableViewStylePlain]; 
    automotiveTable.contentSize = CGSizeMake(320,(70+([nameArray count]*60)+70)*h/480); 
    automotiveTable.delegate = self; 
    automotiveTable.dataSource = self; 
    automotiveTable.backgroundView = backgroundImage; 
    [self.view addSubview:automotiveTable]; 
+0

我在IB中有tableview,因此我不能使用這種方法。我可以根據表視圖的內容調整tableview嗎? –

+0

這是一個MAC應用程序,我嘗試使用內容大小,但沒有與Mac上的NSTableView相關的屬性或方法。 –

+1

UITableView!= NSTableView – geowar

0

我不知道我是否已經明白你的問題, 如果你是試圖根據其內容調整tableview的大小嚐試這個,

1.Get行數所需

2.Multiply它具有行HIGHT

3.設置表視圖HIGHT到你得到了HIGHT。

4.你可以選擇爲你的tableview提供min和max。

有一個愉快的一天:)

+0

其實我正在這樣做。要做到這一點,我需要在tableview上使用set frame,這也是我做的。但即使在我這樣做之後,表格視圖也不會改變。它仍然在同一個地方,並沒有調整大小。我使用Interface Builder創建了tableview。 –

+0

IB提供了包含scrollView的tableview,因此您可能必須調整它的大小。 –

+0

我嘗試調整所有視圖的大小。 Tableview,ClipView,Scrollview。如果我以編程方式創建表格視圖,我可以調整它,如果它來自IB,我無法調整它。 –