我的故事板包含导航控制器,表视图控制器和详细视图控制器。如何让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。
答案 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];
}