来自两个不同UITableView的单个文本

时间:2012-04-20 05:08:56

标签: iphone ios ipad

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

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

任何人都可以让我知道我该怎么做

EX:一个表视图,显示A,B,C,D和另外一个显示1,2,3,4的tableView。 这两张表来自不同的类。现在假设如果我按表1中的一行,我将把textLabel.text作为'A',如果我按表2,如果表1中的选择A和表中的1,我将在视图上获得textLabel.text为'1' 2我应该将AlertView显示为“A1”

参考代码:

viewController.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

的.m:

    #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

请建议

3 个答案:

答案 0 :(得分: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];

答案 1 :(得分: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"];
    }

答案 2 :(得分: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];

}