আমি কিছু অদ্ভুত আচরণ করছি presentViewController:animated:completion
। আমি যা বানাচ্ছি তা মূলত অনুমান করার একটি খেলা।
আমার একটি UIViewController
(ফ্রিকোয়েন্সিভিউ কনট্রোলার) রয়েছে যার একটি UITableView
(ফ্রিকোয়েন্সিট্যাবলভিউ) রয়েছে। ব্যবহারকারী যখন সঠিক উত্তর সম্বলিত প্রশ্নেবলটে ভিউতে সারিটিতে টোকা দেয়, তখন একটি ভিউ (बरोबरভিউ কনট্রোলার) তাত্ক্ষণিক হওয়া উচিত এবং এর ভিউটি একটি মডেল ভিউ হিসাবে পর্দার নীচে থেকে স্লাইড হওয়া উচিত। এটি ব্যবহারকারীদের তাদের সঠিক উত্তর রয়েছে এবং তার পরবর্তী ফ্রিকোয়েন্সি ভিউকন্ট্রোলারটিকে পুনরায় সেট করে পরবর্তী প্রশ্নের জন্য প্রস্তুত রয়েছে ts পরের প্রশ্নটি প্রকাশের জন্য বাটন টিপে সঠিকভিউ নিয়ন্ত্রণকারীকে বরখাস্ত করা হবে।
এই সব সঠিকভাবে প্রত্যেক সময় কাজ করে, এবং correctViewController দৃষ্টিভঙ্গি যতদিন অবিলম্বে প্রদর্শিত presentViewController:animated:completion
হয়েছে animated:NO
।
যদি আমি সেট করে animated:YES
রাখি, সঠিকভিউকন্ট্রোলারটি আরম্ভ করা হয়ে কল করে viewDidLoad
। যাইহোক viewWillAppear
, viewDidAppear
এবং সম্পূর্ণ হওয়া ব্লকটি কল করা presentViewController:animated:completion
হয় না। আমি দ্বিতীয় ট্যাপ না করা পর্যন্ত অ্যাপ্লিকেশনটি এখনও সেখানে বসে ফ্রিকোয়েন্সিভিউকন্ট্রোলার দেখায়। এখন, ভিউউইল অ্যাপয়ার, ভিউডিডঅ্যাপার এবং সমাপ্তি ব্লককে ডাকা হবে।
আমি আরও কিছুটা তদন্ত করেছি এবং এটি কেবলমাত্র অন্য একটি ট্যাপ নয় যা এটি চালিয়ে যাওয়ার কারণ হবে। দেখে মনে হচ্ছে যদি আমি আমার আইফোনকে টিল্ট করে রাখি বা কাঁপিয়েছি এটি এর ফলেও ভিউলল্ড ইত্যাদির কারণ হতে পারে can এটির মতো এটির উন্নতি হওয়ার আগে এটি অন্য কোনও বিট ইউজার ইনপুটটির জন্য অপেক্ষা করছে। এটি একটি আসল আইফোনে এবং সিমুলেটারে ঘটেছিল, যা আমি সিমুলেটরে শেক কমান্ড প্রেরণ করে প্রমাণ করেছি।
এই সম্পর্কে কী করা উচিত তা আমি সত্যিই ক্ষতির মুখোমুখি হয়েছি ... যে কেউ যে কোনও সহায়তা দিতে পারে তার আমি সত্যই প্রশংসা করব।
ধন্যবাদ
আমার কোড এখানে। এটা বেশ সহজ ...
এটি প্রশ্নভিউ কনট্রোলারের কোড যা প্রশ্নাবলী টেবিউয়ের প্রতিনিধি হিসাবে কাজ করে
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row != [self.frequencyModel currentFrequencyIndex])
{
// If guess was wrong, then mark the selection as incorrect
NSLog(@"Incorrect Guess: %@", [self.frequencyModel frequencyLabelAtIndex:(int)indexPath.row]);
UITableViewCell *cell = [self.frequencyTableView cellForRowAtIndexPath:indexPath];
[cell setBackgroundColor:[UIColor colorWithRed:240/255.0f green:110/255.0f blue:103/255.0f alpha:1.0f]];
}
else
{
// If guess was correct, show correct view
NSLog(@"Correct Guess: %@", [self.frequencyModel frequencyLabelAtIndex:(int)indexPath.row]);
self.correctViewController = [[HFBCorrectViewController alloc] init];
self.correctViewController.delegate = self;
[self presentViewController:self.correctViewController animated:YES completion:^(void){
NSLog(@"Completed Presenting correctViewController");
[self setUpViewForNextQuestion];
}];
}
}
এটি নির্ভুল ভিউকন্ট্রোলারের পুরো
@implementation HFBCorrectViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
// Custom initialization
NSLog(@"[HFBCorrectViewController initWithNibName:bundle:]");
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSLog(@"[HFBCorrectViewController viewDidLoad]");
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSLog(@"[HFBCorrectViewController viewDidAppear]");
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)close:(id)sender
{
NSLog(@"[HFBCorrectViewController close:sender:]");
[self.delegate didDismissCorrectViewController];
}
@end
সম্পাদনা করুন:
আমি এই প্রশ্নটি আগে পেয়েছি: ইউআইটিএবলভিউ এবং বর্তমানভিউ কনট্রোলার প্রদর্শন করতে 2 টি ক্লিক নেয়
এবং আমি যদি আমার didSelectRow
কোডটি এতে পরিবর্তন করি তবে এটি অ্যানিমেশন সহ খুব সময় কাজ করে ... তবে এটি অগোছালো এবং কেন এটি প্রথম স্থানে কাজ করে না তা বোঝায় না। সুতরাং আমি এটিকে উত্তর হিসাবে গণনা করি না ...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row != [self.frequencyModel currentFrequencyIndex])
{
// If guess was wrong, then mark the selection as incorrect
NSLog(@"Incorrect Guess: %@", [self.frequencyModel frequencyLabelAtIndex:(int)indexPath.row]);
UITableViewCell *cell = [self.frequencyTableView cellForRowAtIndexPath:indexPath];
[cell setBackgroundColor:[UIColor colorWithRed:240/255.0f green:110/255.0f blue:103/255.0f alpha:1.0f]];
// [cell setAccessoryType:(UITableViewCellAccessoryType)]
}
else
{
// If guess was correct, show correct view
NSLog(@"Correct Guess: %@", [self.frequencyModel frequencyLabelAtIndex:(int)indexPath.row]);
////////////////////////////
// BELOW HERE ARE THE CHANGES
[self performSelector:@selector(showCorrectViewController:) withObject:nil afterDelay:0];
}
}
-(void)showCorrectViewController:(id)sender
{
self.correctViewController = [[HFBCorrectViewController alloc] init];
self.correctViewController.delegate = self;
self.correctViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentViewController:self.correctViewController animated:YES completion:^(void){
NSLog(@"Completed Presenting correctViewController");
[self setUpViewForNextQuestion];
}];
}
presentViewController:
ট্রিগার করার কথা বলে বড় দেরিতে শুরু হয়। এটি আইওএস 7-তে একটি বাগ বলে মনে হচ্ছে এবং এটি অ্যাপল দেব ফোরামেও আলোচিত।