Прежде всего, я хочу поблагодарить всех вас! :)Предупреждение: попытка представить * чей вид не находится в иерархии окон
Итак, у меня есть главный контроллер вида с табличным представлением с пользовательскими ячейками другого класса. Я сделал пользовательский выбор ячейки (вам нужно сдвинуть ячейку представления). В этом действии я вызываю метод в основном контроллере просмотра для отправки SMS. Но я получаю это предупреждение, и контроллер SMS не появляется. Я знаю, что это сообщение об ошибке означает, что он не может открыть SMS-контроллер, потому что главный контроллер не загружен? Я пробовал некоторые коды отсюда, но для меня ничего не работает. Мои занятия в настоящее время выглядит следующим образом:
Main controller.m
.
.
.
-(void)viewWillAppear:(BOOL)animated
{
[self.citiesButton setTitle:rowValue forState:UIControlStateNormal];
UITableView *tableView = (id)[self.view viewWithTag:1];
{
tableView.rowHeight = 100;
UINib *nib = [UINib nibWithNibName:@"TableViewCell" bundle:nil];
[tableView registerNib:nib forCellReuseIdentifier:CellTableIdentifier];
UIEdgeInsets contentInset = tableView.contentInset;
contentInset.top = 20;
[tableView setContentInset:contentInset];
NSLog(@"rowValue is %@", rowValue);
self.city = [_dict objectForKey:rowValue];
}
NSLog(@"View will appear");
[tableView reloadData];
}
-(void)sendSMS
{
MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
if([MFMessageComposeViewController canSendText])
{
controller.body = @"Testy Test";
controller.recipients = [NSArray arrayWithObjects:@"774252704", nil];
controller.messageComposeDelegate = self;
[self dismissViewControllerAnimated:YES completion:^{
[self presentViewController:controller animated:YES completion:nil];
}];
}
}
Так что я пытаюсь закрыть главный контроллер первого, а затем отобразить smsController, но до сих пор не повезло. Я думаю, проблема в том, что я вызываю метод из класса TableViewCell, но все же таблица создается после загрузки представления, поэтому я действительно потерялся здесь.
Большое спасибо за ваше время!
===== EDIT =====
Вот пользовательский класс клеток, из которых я вызываю метод SendSMS
tableViewCell.m
#import "TableViewCell.h"
#import "TableViewController.h"
static NSString *CellTableIdentifier = @"TableViewCell";
@implementation TableViewCell
@synthesize timeLabel = _timeLabel;
@synthesize priceLabel = _priceLabel;
@synthesize infoLabel = _infoLabel;
- (void)awakeFromNib
{
// Initialization code
}
-(void)layoutSubviews
{
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureRecognizer:)];
[self addGestureRecognizer:panGesture];
}
-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:CellTableIdentifier];
return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
-(void)panGestureRecognizer:(UIPanGestureRecognizer *)sender{
CGPoint translation = [sender translationInView:self];
TableViewController *mainController = [[TableViewController alloc] init];
//NSLog(@"Panned with translation point: %@", NSStringFromCGPoint(translation));
sender.view.center = CGPointMake(sender.view.center.x + translation.x,
sender.view.center.y);
CGPoint breakingPoint = CGPointMake(320,sender.view.center.y);
CGPoint startPoint = CGPointMake(150, sender.view.center.y);
CGPoint endPoint = CGPointMake(500, sender.view.center.y);
if (sender.view.center.x <= startPoint.x) {
sender.view.center = startPoint;
}
if (sender.state == UIGestureRecognizerStateEnded) {
if (sender.view.center.x >= breakingPoint.x) {
[UIView animateWithDuration:0.2
delay:0.0
options: UIViewAnimationOptionCurveEaseOut
animations:^{
sender.view.center = endPoint;
}
completion:^(BOOL finished){
NSLog(@"Bought!");
[mainController sendSMS];
}];
} else {
//recognizer.view.center = startPoint;
[UIView animateWithDuration:0.2
delay:0.0
options: UIViewAnimationOptionCurveEaseOut
animations:^{
sender.view.center = startPoint;
}
completion:^(BOOL finished){
NSLog(@"Returned!");
}];
}
}
[sender setTranslation: CGPointZero inView: self];
}
Проверьте, нет ли контроллера в блоке завершения. – dostrander
Пробовал, не повезло ... Я действительно застрял в этом ... Может быть [tableView reloadData] в ViewWillAppear ошибка? – user3573289
можете ли вы показать код, на который вы называете [self sendSMS]? – HaneTV