【问题标题】:How do I get the Detail View Controller to show text relevant to the "cell" selected on the TableView?如何让详细视图控制器显示与 TableView 上选择的“单元格”相关的文本?
【发布时间】:2012-12-20 15:54:03
【问题描述】:

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

我目前设置了我的代码,因此如果选择了一个单元格,它将显示一个图像。就像如果选择了“单元格 1”,它将显示“图像 1”,如果选择了“单元格 2”,那么它将显示“图像 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 中选择“Cell 1”时,它将导致带有可滚动文本的 DetailViewController,该文本与选择其他单元格时显示的文本不同。我会使用“UITextView”并上传不同的 .txt 文件吗?谢谢

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

【问题讨论】:

  • 文本源到底是什么?我的意思是,例如,您只想传递一个字符串并查看它?
  • 是的,您可以使用 textviews 并根据 tableView 的单元格选择加载不同的文本。实际上,您可以制作包含标题的字典数组以显示在 tableView 单元格中以及该标题的详细信息。
  • 在填充 tableView 单元格时,使用 [[dataArr objectAtIndex:indexPath.row]valueForKey:@"title"];并且当任何行被选中时传递描述 [[dataArr objectAtIndex:indexPath.row]valueForKey:@"title"];并在你的 textView 中显示该描述
  • @iVishal 所以我要替换 UIImage 的代码?因为这不是我需要的?
  • 如果你的图片比较好..但是如果你不想使用图片来让你的构建更轻,那么你可以使用 textViews..

标签: iphone objective-c xcode cocoa-touch


【解决方案1】:

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

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

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

然后你可以得到这个数字并将它添加到你的新视图控制器中

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

        NSInteger index = [indexNumber integerValue];

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

    }
}

当然,您需要将 NSInteger textNumber 添加到您的 DetailViewController。然后只需检查选择了什么 NSInteger 并显示不同的文本。

【讨论】:

    【解决方案2】:

    在您的故事板中添加一个 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;
    

    在您的详细视图控制器中

    @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;
    

    在你的 deutilviewcontroller.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];
    }
    

    【讨论】:

    • 我知道有了这个我不需要在情节提要上添加“TextView”,因为它是在 DetailViewController.m 上的 -(void)viewDidLoad 下以编程方式完成的?
    • 是的,您不需要在情节提要上添加“TextView”。您以编程方式分配一个文本视图并在 x,y 100,100 上创建它的矩形并将其设置为您已在 [exampleTxt setText:_fileText] 中传递给详细视图控制器的字符串,然后最后将其添加到视图 [self.view addSubview: exampleTxt];
    • 从表格视图中选择单元格时出现错误。另外,如何设置它为每个选定的单元格显示不同的文本?
    • 您遇到什么错误?在这里detailViewController.fileText=@"What Ever your Text is"; 这发送@"What Ever your Text is" 这只是一个简单的示例,您需要一个数据源来发送不同的字符串,例如使用 NSMutablearray 作为数据源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多