iOS:如何将表视图单元的第一个视图控制器标签数据传递给第二个视图控制器的textView?

时间:2015-07-20 19:15:50

标签: ios objective-c uiviewcontroller ios8 uitextview

我正在开发一个应用程序,我想在第一个视图控制器的表格视图单元格标签数据显示到第二个视图控制器的textView时单击按钮。我已经实现了代码,但是当我点击按钮时,第二个视图的textView变为空白。请建议我在下面的代码中我犯了什么错误,我已经多次尝试但是没能成功。

First View Controller

Second View Controller

First View Controller:

    - (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.jobPostedTableView.dataSource = self;

    //Slide Navigation
    [self.sideNavigation addTarget:[SlideNavigationController sharedInstance] action:@selector(toggleLeftMenu) forControlEvents:UIControlEventTouchUpInside];

    WebManager *manager = [WebManager sharedInstance];
    [manager getJobPostedWithCompletionBlock:^(id response){
        NSDictionary *dictionary = (NSDictionary *)response;

        // Read data from JSON
        NSDictionary *responseObject = [dictionary objectForKey:@"response"];
        NSLog(@"The Array%@",responseObject);

        self.bids = [responseObject objectForKey:@"bids"];
        self.job_description = [responseObject objectForKey:@"job_description"];
        self.job_id = [responseObject objectForKey:@"job_id"];
        self.job_completed = [responseObject objectForKey:@"job_completed"];
        self.job_latitude = [responseObject objectForKey:@"job_latitude"];
        self.job_longitude = [responseObject objectForKey:@"job_longitude"];
        self.job_priority = [responseObject objectForKey:@"job_priority"];
        self.job_start_date = [responseObject objectForKey:@"job_start_date"];
        self.job_title = [responseObject objectForKey:@"job_title"];

        [self.jobPostedTableView reloadData];
    }];

    self.reversedGeocodes = [NSMutableDictionary dictionary];

        }

   #pragma mark - TableView Data Source

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return [self.job_title count];
    }

    - (NSInteger) numberOfSectionsInTableview:(UITableView *)tableView
    {
        return 1;
    }

    - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *cellIdentifier = @"JobTableViewCell";
        JobTableViewCell *cell = (JobTableViewCell *)[self.jobPostedTableView dequeueReusableCellWithIdentifier:cellIdentifier];

        if(cell == nil) {

            cell = [[JobTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        }
        // Comparing array string to display an urgent image
        if ([[self.job_priority objectAtIndex:indexPath.row]
             isEqualToString:@"urgent"]) {
            cell.urgentLabel.hidden = NO;
        } else {
                cell.urgentLabel.hidden = YES;
        }
        // Condition whether job completed is open or closed
        if ([[self.job_completed objectAtIndex:indexPath.row]
             isEqualToString:@"1"]) {
            cell.jobStatus.text = @"Open";
            [cell.jobStatus setTextColor:[UIColor colorWithRed:(84/255.f) green:(56/255.f) blue:(255/255.f) alpha:1.0f]];
            cell.flagImage.image = [UIImage imageNamed:@"jobPosted_opened.PNG"];
        } else {
            cell.jobStatus.text = @"Closed";
            [cell.jobStatus setTextColor:[UIColor colorWithRed:(179/255.f) green:(179/255.f) blue:(180/255.f) alpha:1.0f]];
            cell.flagImage.image = [UIImage imageNamed:@"jobPosted_closed.PNG"];
        }

        cell.jobTitle.text = [self.job_title objectAtIndex:indexPath.row];
        cell.jobContent.text = [self.job_description objectAtIndex:indexPath.row];
        cell.bidsLabel.text = [[self.bids objectAtIndex:indexPath.row ]stringValue];
        // Latitude and Longitude

        float lat = [self.job_latitude[indexPath.row] floatValue];
        float lng = [self.job_longitude[indexPath.row] floatValue];

        [self locationNameWithLat:lat
                              lng:lng
                completionHandler:^(NSString *locationName, NSError *error) {
                    cell.locationJob.text = locationName;
                }];


        return cell;

    }

- (IBAction)onClickJobButton:(id)sender {

    JobDetailsViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"JobDetailsViewController"];
    [self.navigationController pushViewController:vc animated:YES];
    NSIndexPath *indexPath = [self.jobPostedTableView indexPathForSelectedRow];
    JobDetailsViewController *jobDetailsController = [[JobDetailsViewController alloc]init];
    jobDetailsController.jobDetailView = [self.job_description objectAtIndex:indexPath.row];
}

第二视图控制器:

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
WebManager *manager = [WebManager sharedInstance];
NSString *user_name = manager.completeName;
self.nameLabel.text = user_name;
self.jobtextView.text = self.jobDetailView;

}

1 个答案:

答案 0 :(得分:1)

如果您使用segues,可以使用prepareForSegue方法发送文本:

reflect

不要忘记在- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Make sure your segue name in storyboard is the same as this line if ([[segue identifier] isEqualToString:@"YOUR_SEGUE_NAME_HERE"]) { // Get reference to the destination view controller YourSecondViewController *vc = [segue destinationViewController]; // Pass labelData which is a string [vc setTextString:labelData]; } }

中声明字符串属性
SecondViewController.h