如何让Detail View Controller显示与TableView上选择的“单元格”相关的文本?

时间:2012-12-20 15:54:03

标签: iphone objective-c xcode cocoa-touch

我的故事板包含导航控制器,表视图控制器和详细视图控制器。如何让Detail View Controller显示与TableView上选择的“单元格”相关的文本?

我目前设置了代码,因此如果选择了单元格,它将显示图像。就像选择“Cell 1”一样,如果选择“Cell 2”,它将显示“Image 1”,然后显示“Image 2”等。

- (void)viewDidLoad
{
    [super viewDidLoad];



//Create a couple UIImage objects
UIImage *firstImage = [UIImage imageNamed:@"first.png"];
UIImage *secondImage = [UIImage imageNamed:@"second.png"];
UIImage *thirdImage = [UIImage imageNamed:@"third.png"];

//Title of the view
self.title = charName;

//UIImageview based on characterNumber
switch (characterNumber) {
    case 0:
        CharacterImage.image = firstImage;
        break;

    case 1:
        CharacterImage.image = secondImage;
        break;

    case 2:
        CharacterImage.image = thirdImage;
        break;

    default:
        break;
}

}

我该怎么做但是文字而不是图片?因此,当从表视图控制器中选择“单元1”时,它将导致具有可滚动文本的DetailViewController与将显示其他单元格是否被选中时显示的文本不同。我会使用“UITextView”并上传不同的.txt文件吗?感谢

因此,当从Table View Controller中选择“Cell 1”时,它将导致带有可滚动文本的DetailViewController。

2 个答案:

答案 0 :(得分:0)

你需要在ViewControllers之间创建一个Segue(ctrl +从一个拖动到另一个)。然后添加一个标识符:

然后你需要从你的didSelectRowAtIndexPath方法中调用它,并将indexPath作为数字发送给它:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self performSegueWithIdentifier:@"DetailSegue" sender:[NSNumber numberWithInt:indexPath.row]];
}

然后您可以获取该数字并将其添加到新的viewController

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(NSNumber*)indexNumber
{
    if([[segue identifier] isEqualToString:@"DetailSegue"]){

        NSInteger index = [indexNumber integerValue];

        DetailViewController *detailView = [segue destinationViewController];
        detailView.textNumber = index;

    }
}

当然,您需要在DetailViewController中添加NSInteger textNumber。然后只需检查选择了哪个NSInteger并显示不同的文本。

答案 1 :(得分:0)

在你的故事板中添加一个UIViewcontroller并使用命令+拖动将其连接到你的表视图控制器,点击箭头并输入一个segue名称并选择推送。

在你的tableview controller.m

//#pragma mark - Table Did Select 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self performSegueWithIdentifier:@"segueNameGoesHere" sender:self];

}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    if([[segue identifier] isEqualToString:@"segueNameGoesHere"])
    {
       DetailViewController *detailViewController  = [segue destinationViewController];
        //This will display on the Document Viewer
        detailViewController.fileText=@"What Ever your Text is"; // you can also select that text source from an nsmutablearray , a file or cloud solution but in that case you need to write a method that returns a string to you 
    }
}

在您的detailview控制器.h

@interface DetailviewViewController: UIViewController {
    UITextView *exampleTxt;
}
@property (nonatomic, strong)NSString *fileText;
你的detailview controller.m

中的

@synthesize fileText=_fileText

// you can create your textview in IB or programatically like below after that all you need to this set your text  
- (void)viewDidLoad 
{
    [super viewDidLoad ];
    exampleTxt = [[UITextView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    [exampleTxt setText:_fileText]; // look at here
    //[exampleTxt setColor:[UIColor redColor]]; //yes, it's deprecated, but works
    [self.view addSubview: exampleTxt];

}

如果您不想以编程方式添加ui文本视图,可以将其添加到IB中。因此,要在IB中添加TextView,请按照以下步骤操作;

转到故事板上的详细视图控制器,将TextView拖放到detailViewController;

detailviewController.h

@interface DetailviewViewController:  : UIViewController
{
    UITextView *textView;
}

@property(nonatomic,strong)IBOutlet UITextView *textView; 
@property (nonatomic, strong)NSString *fileText;
你的deatilviewcontroller.m

中的

@synthesize textView=_textView;
@synthesize fileText=_fileText;


- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    //[_textView setText:@"Your text"]; 
    [_textView setText:_fileText];
}