想要使用相同的TableView

时间:2016-09-01 10:39:51

标签: ios objective-c

我在iOS应用程序开发方面非常新,所以需要一点支持!! 我在 objectiveC 中使用了TableView来制作一个下拉列表来显示已成功制作的国家/地区的名称,但现在我希望同一个tableView与不同的状态列表一起使用,因为我有两个NSMutable数组一个用于“ countryList ”,另一个用于“ stateList ” 我是否可以使用相同的tableView但显示stateList数据。

NSMutableArray *countryArray;
NSMutableArray *stateArray;

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return countryArray.count ;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
   return 25;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell;

    static NSString *idenfier = @"countryList";
    cell = [tableView dequeueReusableCellWithIdentifier:idenfier forIndexPath:indexPath];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.textLabel.text = [countryArray objectAtIndex:indexPath.row];

    return cell;

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    self.registerCountry.text = [[[tableView cellForRowAtIndexPath:indexPath] textLabel] text];
    // self.countryView.hidden = YES;

    self.countryView.frame = CGRectMake(self.countryView.frame.origin.x, self.countryView.frame.origin.y, self.countryView.frame.size.width, 0);

    if([_registerCountry.text isEqual:@""]){
        [_dropDownState setEnabled:NO];
    }
    else{
        [_dropDownState setEnabled:YES];

    }

}

- (IBAction)dropDownCountry:(id)sender {
    self.countryView.hidden = NO;

    if (self.countryView.frame.size.height != 0) {
        [UIView animateWithDuration:0.3 animations:^{
            self.countryView.frame = CGRectMake(self.countryView.frame.origin.x, self.countryView.frame.origin.y, self.countryView.frame.size.width, 0);
        } completion:^(BOOL finished) {
            // self.dropDownImageView.highlighted = NO;
        }];
    }
    else {
        [UIView animateWithDuration:0.3 animations:^{
            self.countryView.frame = CGRectMake(10, 404, 302, 100);
        } completion:^(BOOL finished) {
            // self.dropDownImageView.highlighted = YES;
        }];
    }

}

- (IBAction)dropDownState:(id)sender {
}

7 个答案:

答案 0 :(得分:1)

@implementation RootViewController

@synthesize btnState,btnCountry, stateArray,countryArray,tempArray;
@synthesize tempTable;

- (void)viewDidLoad {

[super viewDidLoad];

tempTable.hidden = YES;

countryArray = [[NSMutableArray alloc]initWithObjects:@"India",@"Pakistan",@"USA",nil];
stateArray = [[NSMutableArray alloc]initWithObjects:@"Gujarat",@"Maharashtra", @"Karnataka",nil];
tempArray = [[NSMutableArray alloc]init];

}

- (IBAction) showCountry:(id)sender
{
btnCountry = (UIButton *)sender;
tempArray = countryArray;
[tempTable reloadData];
if([btnCountry isSelected])
{
    tempTable.hidden = YES;
    btnCountry.selected = NO;
}
else
{
    tempTable.hidden = NO;
    btnCountry.selected = YES;
}
}


- (IBAction) showState:(id)sender
{
btnState = (UIButton *)sender;
tempArray = stateArray;
[tempTable reloadData];

if([btnState isSelected])
{
    tempTable.hidden = YES;
    btnState.selected = NO;
}
else
{
    tempTable.hidden = NO;
    btnState.selected = YES;
}
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section      {

return [tempArray count];
 }


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

cell.textLabel.text = [tempArray objectAtIndex:indexPath.row];

return cell;
}


@end

此处.m代码

<div>
@Html.Sitecore().Placeholder("phForm")
</div>

答案 1 :(得分:0)

- (NSInteger)tableView:(UITableView *)tableView
 numberOfRowsInSection:(NSInteger)section {
     return stateList.count
     //OR
     return countryList.count
}

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    //Load cell with the array[indexPath.row] you want
}

答案 2 :(得分:0)

在TableViewController中定义枚举

your_index

当前视图控制器设置要加载的列表类型

typedef NS_ENUM(NSInteger, ListViewType)
{
    CountryList,
    StateList
};

@interface TableViewController : UITableViewController

@property (nonatomic, weak) ListViewType listViewType;

@end


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuseIdentifier" forIndexPath:indexPath];

    // Configure the cell...
    switch (self.listViewType)
    {
        case CountryList:
            //Load countryList array
            break;

        case StateList:
            //load stateList array
            break;

        default:
            break;
    }
    return cell;
}

答案 3 :(得分:0)

是的,可以只输入isCountry TableViewController * tableViewController = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:nil]; tableViewController.listViewType = CountryList; //Set depends on the need (CountryList/ StateList) tableViewController.modalPresentationStyle = UIModalPresentationFormSheet; tableViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; [self presentViewController:tableViewController animated:YES completion:nil]; 类型并检入表格视图委托&amp;数据源。当您想要更改tableView值时,只需更改BOOLisCountry reload的值。

答案 4 :(得分:0)

,只需使用一个BOOL变量来区分 countryList stateList 下拉列表

选择BOOL isCountyDropDownClick;

如果有任何一个选项,请点击相应设置BOOLReload TableView

赞,如果单击 countryList 而不是将BOOL设置为YESReload table则将BOOL设置为NO。< / p>

numberOfRowsInSectioncellForRowAtIndexPath根据BOOL值使用数据源数组。

例如,

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    if (isCountyDropDownClick)
    {

       return  CountryListArray.count;

    }
    else{

       return  StateListArray.count;

    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    if (isCountyDropDownClick)
    {

       //Use CountryListArray

    }
    else{

      //Use StateListArray

   }

   .....
}

这可以根据您的要求给出一些想法和修改。

答案 5 :(得分:0)

您可以使用UITableView部分,这样您的国家/地区列表就可以成为您的部分,当您关闭部分(国家/地区)列表时,您的状态可能是您的行,该部分中的行可能为0,当您点击并打开时可以填充实际的行列表。

@interface States : NSObject

@property(nonatomic, strong) NSString *name;

@end

@interface Countries : NSObject

@property(nonatomic, strong) NSMutableArray<States *> *states;

@end


@interface ViewController () <UITableViewDataSource>

@property(nonatomic,strong) NSMutableArray<Countries *> *countries;

@end

@implementation ViewController


-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return self.countries.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [self.countries objectAtIndex:section].states.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
// return your configured cell here
}


@end

在上面的代码中,我创建了两个类,一个用于国家,另一个用于状态以正确映射表,希望这有帮助。

答案 6 :(得分:0)

您可以使用tabbar作为解决方案,

更改标签并在同一张桌子上显示内容。

对于那次访问,

Tab bar display data in same table view

希望这会对你有所帮助。