我创建了一个iPad应用程序,其中我使用了searchBar,searchBar数据来自数据库,我将它存储在一个名为tableData的数组中。
在此之后我将这个tabledata数组传递给名为myTableView的tableView,我在didLoad方法中声明了表视图的高度。
我希望tableView的高度根据表中的元素数量
是动态的这是代码段,
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
// only show the status bar’s cancel button while in edit mode
sBar.autocorrectionType = UITextAutocorrectionTypeNo;
// flush the previous search content
[tableData removeAllObjects];
}
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
sBar.showsCancelButton = NO;
[myTableView setHidden:TRUE];
}
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
[myTableView setHidden:FALSE];
[tableData removeAllObjects];// remove all data that belongs to previous search
myTableView.backgroundColor=[[UIColor alloc]initWithRed:4.0 / 255 green:24.0 / 255 blue:41.0 / 255 alpha:1.0];
[self.view bringSubviewToFront:myTableView];
if([searchText isEqualToString:@""]||searchText==nil){
[myTableView setHidden:TRUE];
[myTableView reloadData];
return;
}
NSInteger counter = 0;
for(NSString *name in arr)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
NSRange r = [name rangeOfString:searchText options:NSCaseInsensitiveSearch];
if(r.location != NSNotFound)
{
if(r.location== 0)//that is we are checking only the start of the naames.
{
[tableData addObject:name];
}
}
counter++;
[pool release];
}
[myTableView reloadData];
}
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
// if a valid search was entered but the user wanted to cancel, bring back the main list content
[tableData removeAllObjects];
@try{
[myTableView reloadData];
}
@catch(NSException *e){
}
[sBar resignFirstResponder];
sBar.text = @"";
}
// called when Search (in our case “Done”) button pressed
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
[searchBar resignFirstResponder];
[myTableView reloadData];
}
在didLoad中声明myTableView:
myTableView.frame=CGRectMake(550, 00, 220,400);
看截图, 在第一个图像数据中,但是,tableView不会增加它的大小,在第二个图像中只有1个数据,但高度仍在修复。
答案 0 :(得分:6)
正如Atulkumar V. Jain所说的尝试:在- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
方法中调整表格框架的大小如下:
CGRect frame = myTableView.frame;
frame.size.height = MIN(40 * [tableData count], 400); // 400 is the maximum height that the table view can have. You can change it to whatever you like
myTableView.frame = frame;
请告诉我这是否适合您。
答案 1 :(得分:1)
在- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
方法中,根据数组中记录的数量更改tableview的高度。由于您可能知道行的高度,因此可以使用以下行动态地更改tableview的高度
tableview.frame.size.height = ROW_HEIGHT*NO_OF_DATA_IN_ARRAY
希望这能解决你的问题。
答案 2 :(得分:0)
你可以使用 UITableView委托方法, - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
在这里你可以动态设置行的高度