0

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

我目前已经设置了我的代码,因此如果选择了一个单元格,它将显示一个图像。就像选择了“单元格 1”一样,如果选择了“单元格 2”,它将显示“图像 1”,那么它将显示“图像 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;
}

}

除了文本而不是图像,我该怎么做?因此,当从 Table View Controller 中选择“单元格 1”时,它将导致 DetailViewController 的可滚动文本与选择其他单元格时显示的文本不同。我会使用“UITextView”并上传不同的 .txt 文件吗?谢谢

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

4

2 回答 2

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 
    }
}

在你的细节视图控制器.h

@interface DetailviewViewController: UIViewController {
    UITextView *exampleTxt;
}
@property (nonatomic, strong)NSString *fileText;

在您的详细视图 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 中;

详细视图控制器.h

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

@property(nonatomic,strong)IBOutlet UITextView *textView; 
@property (nonatomic, strong)NSString *fileText;

在你的 detilviewcontroller.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];
}
于 2012-12-20T16:26:11.580 回答
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 并显示不同的文本。

于 2012-12-20T16:16:10.317 回答