选择 UITableView 行时使用特定信息填充 UITextView

Posted

技术标签:

【中文标题】选择 UITableView 行时使用特定信息填充 UITextView【英文标题】:Populating UITextView with Specific Info when UITableView Row is Selected 【发布时间】:2013-05-18 00:00:01 【问题描述】:

我有一个 UITableView 和另一个视图。另一个视图有一个 UITextView,我希望根据选择的表视图中的哪一行来填充不同的文本。如果我为所有不同的文本选项创建不同的视图,我知道该怎么做。如果我这样做,我可以在点击该行时打开该视图。我只是想避免创建一堆不同的视图,而只使用一个加载不同文本的视图,具体取决于在表格视图中点击的行。我想我只需要知道带有文本视图的视图如何从表格视图访问 indexPath.row 。有什么建议吗?

编辑:这是我的代码。

LHRRoster.m

#import "LHRRoster.h"
#import "CustomCellBackground.h"
#import "OnMyHonor.h"
#import "AVA.h"
#import "Receivers.h"
#import "BandDetailView.h"

@interface LHRRoster ()

@end

@implementation LHRRoster

    NSMutableArray *mbTableData;


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        // Custom initialization
    
    return self;


- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    mbTableData = [NSMutableArray arrayWithObjects:@"Aesthetics Versus Architecture", @"On My Honor", @"Receivers", @"Skyscraper Stereo", @"California", @"Late Ones", @"Uh-Huh Baby Yeah", @"Danielle Bouchard", @"Chris Karrer", @"Joey Blue", @"The Codas", @"Your Favorite Hero", @"Nixon", @"Skam Impaired", @" SaySomethingHugeOnFire", @"Adore Me Not", @"Common Collective", @"The Royal Tees", @"The Gravetones", @"Bush League", @"Rock & Roll Television", @" Tastyface", @"The Lips", @"Mercy Academy", @"Audiostrobelight", nil];

    self.title = @"LHR Roster";


- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    return [mbTableData count];


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *mbTableIdentifier = @"SimpleTableItem";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:mbTableIdentifier];

    if (cell == nil)
    
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:mbTableIdentifier];
        cell.textLabel.font=[UIFont systemFontOfSize:14.0];
    

    cell.backgroundView = [[CustomCellBackground alloc] init];
    cell.selectedBackgroundView = [[CustomCellBackground alloc] init];
    cell.textLabel.backgroundColor = [UIColor clearColor];
    cell.textLabel.highlightedTextColor = [UIColor darkGrayColor];

    cell.textLabel.text = [mbTableData objectAtIndex:indexPath.row];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    return cell;


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

    BandDetailView *detailView = [[BandDetailView alloc]initWithNibName:@"BandDetailView" bundle:nil];

    if (indexPath.row == 0)
    
        detailView.title = @"Aesthetics vs Architecture";
        UIImage *image = [UIImage imageNamed: @"AVA.png"];
        [detailView.bandPic setImage:image];
        NSString *bio = @"";
        [detailView.bandInfo setText:bio];
        [self.navigationController pushViewController:detailView animated:YES];
    


@end

【问题讨论】:

查看this tutorial 并修改代码以满足您的需求。 【参考方案1】:

您正在获取选定的单元格对象,只需将该对象传递给 TextView,它将动态加载选定的单元格数据。需要注意的重要一点,首先推送视图控制器,然后将数据传递给该控制器。在您的代码中,您已通过首先数据,然后推送视图控制器,这不起作用

【讨论】:

【参考方案2】:

MVC - 模型、视图、控制器。您的数据是模型。表格视图和文本视图是视图。你的 UIViewController 是控制器。它完成所有工作。

在控制器中实现didSelectRowAtIndexPath,它是表视图的委托。现在您知道 选择了表格的一行,并且您知道它是 行。因此,从模型中拉出所需的文本并将其粘贴到 UITextView 中。

【讨论】:

【参考方案3】:

扩展您的 didSelectRowAtIndexPath 以同时修改您的 UITextView。

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

    **myUiTextView.text = somethingBasedOnTheRowSelected[indexPath.row];** <-- new code here


    // followed by your existing code

【讨论】:

【参考方案4】:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

      BandDetailView *detailView = [[BandDetailView alloc]initWithNibName:@"BandDetailView"  bundle:nil];

    if (indexPath.row == 0)
    
        detailView.title = @"Aesthetics vs Architecture";
        UIImage *image = [UIImage imageNamed: @"AVA.png"];
        [detailView.bandPic setImage:image];
        NSString *bio = @"";
        [detailView.bandInfo setText:bio];
        [self.navigationController pushViewController:detailView animated:YES];
    
    **myUiTextView.text =[yourarray  indexPath.row];

按照此代码操作,此代码可能会对您有所帮助。

【讨论】:

【参考方案5】:

只需添加您的代码即可

     yourtextfieldname.text=[yourarrayname objectAtIndex:indexpath.row];

并在您的文本字段中获取您选择的行文本字段数据。

我希望这段代码对你有用。

【讨论】:

以上是关于选择 UITableView 行时使用特定信息填充 UITextView的主要内容,如果未能解决你的问题,请参考以下文章

在“UITableView”中选择行时调用新视图

在 UIPickerView 上选择行时如何使用信息填充第二个视图控制器

而在 indexPath 的 didselectrow 上选择取消选择行时会崩溃

当用户使用 UITableView 的后退按钮滚动到最后选定的行时

在 UITableView 中选择行时变量不更新

Swift-app 在 UITableView 中选择行时崩溃