我试图在UITextView
内获取简单UICollectionViewCell
的文字内容。基本上,当用户共享某个单元格时,我想抓住在该单元格中编写的内容,以便在ActivityViewController
中使用。
事情是,它说它是空白的。它显然不是空白:当我点击“共享”时,我正确地看着它,并且它中有文字。 (该文本是拍摄照片的位置的反向查找地址。)
我非常缺乏经验的眼睛认为问题在于TextView正在被一个块填充。我不知道为什么会出现这个问题,但它似乎会向我跳出来。
下面是设置单元格的方法(从而设置TextView的文本),然后是应该抓住它的Share方法:
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
PhotoCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"photoCell" forIndexPath:indexPath];
ALAsset *asset = [_photosArray objectAtIndex:indexPath.row];
ALAssetRepresentation *assetRep = [asset defaultRepresentation];
[cell.labelMain setText:[assetRep filename]];
CLLocation *location = [asset valueForProperty:ALAssetPropertyLocation];
CLGeocoder *geocoder = [[CLGeocoder alloc] init] ;
[geocoder reverseGeocodeLocation:location
completionHandler:^(NSArray *placemarks, NSError *error) {
if (error){
NSLog(@"Geocode failed with error: %@", error);
return;
}
CLPlacemark *placemark = [placemarks objectAtIndex:0];
NSArray *addressArray = [NSArray arrayWithArray:[placemark.addressDictionary valueForKey:@"FormattedAddressLines"]];
[cell.textViewDescription setText:[NSString stringWithFormat:@"%@\n%@\n%@", [addressArray objectAtIndex:0], [addressArray objectAtIndex:1], [addressArray objectAtIndex:2]]];
}];
return cell;
}
这一切似乎都很完美。但是在下面的Share方法中,locationName
无法解释为空白:
-(void)sharePic {
PhotoCell *currentCell = (PhotoCell*)[self collectionView:_collectionViewMain cellForItemAtIndexPath:[NSIndexPath indexPathForItem:_selectedIndex inSection:0]];
NSString *locationName = [[currentCell textViewDescription] text];
NSArray *arrayOfActivityItems = [NSArray arrayWithObjects:locationName, nil];
UIActivityViewController *activityVC = [[UIActivityViewController alloc]
initWithActivityItems:arrayOfActivityItems applicationActivities:nil];
[self.navigationController presentViewController:activityVC animated:YES completion:nil];
}
我认为该块是什么导致字符串locationName
在Share方法中为空? (它已正确初始化,只是一个空字符串)。如果是这样,有办法吗?或者,如果没有,任何想法locationName
为什么显而易见,即使textViewDescription
中有文字?
我想要的只是获取该字段中的文字......
答案 0 :(得分:1)
不要从单元格中取回文本。文本应该在您的数据模型中,您应该从那里得到它...
那就是说,你的问题与块无关(虽然异步操作有时会引起你的问题)。问题是您正在创建一个新单元而不是获取现有单元。而不是:
PhotoCell *currentCell = (PhotoCell*)[self collectionView:_collectionViewMain cellForItemAtIndexPath:[NSIndexPath indexPathForItem:_selectedIndex inSection:0]];
你应该:
PhotoCell *currentCell = (PhotoCell*)[self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:_selectedIndex inSection:0]];