3

我有两个 UITableview,如果我在每个表中选择一行,则textLabel.text该特定行的应该显示在单个 UIAlertview 中。

如何组合textLabel.text两个表并在一个 UIAlertView 中显示

谁能让我知道我该怎么做

例如:一个显示 A、B、C、D 的表格视图和另一个显示 1、2、3、4 的 tableView。这两张桌子来自不同的班级。现在假设如果我在表 1 中按一行,我将得到 textLabel.text 作为“A”,如果我按表 2,如果在 table1 中选择 A 并在表中选择 1,则现在在视图上将 textLabel.text 作为“1” 2 我应该得到一个 AlertView 显示消息为“A1”

参考代码:

视图控制器.h

#import <UIKit/UIKit.h>
#import "FirstTVContoller.h"
#import "SecondTVController.h"

@interface TwoTableViewsViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>{
    FirstTVContoller *firstController;
    SecondTVController *secondController;
    IBOutlet UITableView *firstTable;
    IBOutlet UITableView *secondTable;
    NSString *stringTable1;
    NSString *stringTable2;
    NSArray * myArray1;
    NSArray * myArray2;
}
@property (nonatomic, retain)  NSString *stringTable1;
@property (nonatomic, retain)  NSString *stringTable2;
@property (nonatomic, retain)  NSArray * myArray1;
@property (nonatomic, retain)   NSArray * myArray2;

@end

米:

    #import "TwoTableViewsViewController.h"

    @implementation TwoTableViewsViewController

    @synthesize stringTable1 = stringTable1; 
    @synthesize stringTable2 = stringTable2;
    @synthesize  myArray1,myArray2;

    - (void)viewDidLoad {
        [super viewDidLoad];
        if (firstController == nil) {
            firstController = [[FirstTVContoller alloc] init];
        }
        if (secondController == nil) {
            secondController = [[SecondTVController alloc] init];
        }
        [firstTable setDataSource:firstController];
        [secondTable setDataSource:secondController];

        [firstTable setDelegate:firstController];
        [secondTable setDelegate:secondController];
        firstController.view = firstController.tableView;
        secondController.view = secondController.tableView;
    }

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

        if (tableView == firstTable) {
         self.stringTable1  = [myArray1 objectAtIndex: indexPath.row];
            //call uiAlert, and place the stringTable1 on your message

        if (tableView == secondTable) {
            self.stringTable2  = [myArray2 objectAtIndex: indexPath.row];   
            //call uiAlert, and place the stringTable2 on your message
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"hi" message:[NSString stringWithFormat:@"%@ %@", self.stringTable1, self.stringTable2] delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];    
            [alert show];     
            [alert release];

        }}

}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];

}   

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


- (void)dealloc {
    [firstController release];
    [secondController release];
    [firstTable release];
    [secondTable release];
    [stringTable1 release];
    [stringTable2 release];
    [super dealloc];
}

@end

表格1:

#import <Foundation/Foundation.h>


@interface FirstTVContoller : UITableViewController <UITableViewDataSource, UITableViewDelegate>{
    NSMutableArray *items;
}

@end


#import "FirstTVContoller.h"
#import "SecondTVController.h"

@implementation FirstTVContoller



-(void) loadView
{
    if (items == nil) {
        items = [[NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"6",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",nil] retain];
    }
}

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

-(NSInteger) tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
{
    return [items count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewStylePlain reuseIdentifier:@"MyIdentifier"];
    }
    cell.textLabel.text = [NSString stringWithFormat:@"1.%@" ,[items objectAtIndex:indexPath.row]];
    return cell;
}

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    NSString *stringVariable = cell.textLabel.text;
    NSLog(@"%@",stringVariable);
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {

        return UITableViewCellEditingStyleDelete;

}
- (void)tableView:(UITableView *)tv commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
forRowAtIndexPath:(NSIndexPath *)indexPath {

    if(editingStyle == UITableViewCellEditingStyleDelete) {     
        //Delete the object from the table.
        [items removeObjectAtIndex:indexPath.row];
        [tv deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
}

-(void) dealloc
{
    [items release];
    [super dealloc];
}

@end

表2:

#import <Foundation/Foundation.h>

@interface SecondTVController : UITableViewController <UITableViewDataSource, UITableViewDelegate>{
    int numberOfCells;
}
@end

#import "SecondTVController.h"


@implementation SecondTVController


-(void) viewDidLoad
{
    numberOfCells = 20;
}
-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

-(NSInteger) tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
{
    return numberOfCells;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellSelectionStyleNone reuseIdentifier:@"MyIdentifier"];
    }
    cell.textLabel.text = [NSString stringWithFormat:@"2.%d",  indexPath.row];

    return cell;
}

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    NSString *stringVariable = cell.textLabel.text;
    NSLog(@"%@",stringVariable);

}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {

    return UITableViewCellEditingStyleDelete;

}
- (void)tableView:(UITableView *)tv commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
forRowAtIndexPath:(NSIndexPath *)indexPath {

    if(editingStyle == UITableViewCellEditingStyleDelete) {     
        //Delete the object from the table.
        numberOfCells -=1;
        [tv deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationRight];
    }
}

@end

请建议

4

3 回答 3

2

当您希望显示 alertView 时,我不清楚,但这将对您有所帮助

您需要有一个属性来放置标签的文本

所以你的.h

@ interface MyViewController :UIViewController {
 NSString *_stringTable1;
    NSString *_stringTable2;
}

@property (nonatomic, retain)  NSString *stringTable1;
@property (nonatomic, retain)  NSString *stringTable2;

在你的 .m

@synthesize stringTable1 = _stringTable1; 
@synthesize stringTable2 = _stringTable2; 
- (void) dealloc{
[_stringTable1 release];
[_stringTable2 release];
    [super dealloc];
}

所以在你的餐桌代表上

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {

    if (tableView == table1) {
    self.stringTable1  = [myArray1 objectAtIndex: indexPath.row];   
    //call uiAlert, and place the stringTable1 on your message
 }
    if (tableView == table2) {
    self.stringTable2  = [myArray2 objectAtIndex: indexPath.row];   
        //call uiAlert, and place the stringTable2 on your message

 }

    }

当您调用 uiAlertView 时,对于消息,您可以将它们一起显示

 [NSString stringWithFormat:@"%@ %@", self.stringTable1, self.stringTable2];
于 2012-04-20T05:18:28.663 回答
1

//在第二个表格单元格点击事件的点击上将两个字符串合并为一个字符串...

//在 didSelectRowAtIndexPath 方法中使用以下代码..并享受...

NSString *tempstring = [[NSString alloc]init];
   tempstring =yourlable.text;// your cell label...
   if (textField.tag == 1) {

    NSUserDefaults *stringsaver = [NSUserDefaults standardUserDefaults];

    if([stringsaver objectForKey:@"stringsaver"]== nil)
    {
        [stringsaver setObject:tempstring forKey:@"stringsaver"];
    }
    else
    {
        NSString *combinedstring = [stringsaver objectForKey:@"stringsaver"];
       //NSLog(@"==%@",combinedstring);

        UIAlertView *alertdata = [[UIAlertView alloc] 
                                  initWithTitle:@"Your Title" 
                                  message:combinedstring
                                  delegate:nil
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil];
        [alertdata show];
        [alertdata release];

       [stringsaver removeObjectForKey:@"stringsaver"];
    }
于 2012-04-20T05:19:37.973 回答
0

尝试这个-

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell * cell1 = [tableView cellForRowAtIndexPath:indexPath];

    // get here the instance of otherTableView.
    UITableViewCell * cell2 = [otherTableView cellForRowAtIndexPath:indexPath];

   UILabel *Title1 = (UILabel *)[cell1 viewWithTag:1]; //for it you need to make the label with Tag 1
   UILabel *Title2 = (UILabel *)[cell2 viewWithTag:1]; //for it you need to make the label with Tag 1 
   NSString * str = [NSString stringWithFormat:@"%@ %@",[Title1 text],[Title2 text]];


  //fire the alert

   UIAlertView *alertdata = [[UIAlertView alloc] 
                              initWithTitle:@"Your Title" 
                              message:str
                              delegate:nil
                              cancelButtonTitle:@"OK"
                              otherButtonTitles:nil];
    [alertdata show];

}
于 2012-04-20T06:22:49.737 回答