উত্তর:
এটি আইওএস 6 এবং তার পরেও সম্ভব: আপনি পদ্ধতিটি প্রয়োগ করতে হবে
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
আপনার দর্শন নিয়ামক। আপনি সেখানে আপনার বৈধতা দিন, এবং যদি এটি ঠিক থাকে তবে return YES;
যদি তা না হয় return NO;
এবং প্রস্তুতিফেজু বলা হয় না।
নোট করুন যে প্রোগ্রামটিগতভাবে সেগগুলি ট্রিগার করার সময় এই পদ্ধতিটি স্বয়ংক্রিয়ভাবে কল হয় না। আপনার যদি চেকটি সম্পাদন করতে হয় তবে সেগ সম্পাদন করবেন কিনা তা নির্ধারণ করার জন্য আপনাকে shouldPerforSegueWithIdentifier কল করতে হবে।
if ([self shouldPerformSegueWithIdentifier:@"segueIdentifier" sender:nil]) { [self performSegueWithIdentifier:@"segueIdentifier" sender:nil]; }
দ্রষ্টব্য: আপনি যদি আইওএস 6 টার্গেট করতে পারেন তবে গৃহীত উত্তর হ'ল সর্বোত্তম পদ্ধতি iOS
আমি বিশ্বাস করি না যে কোনও সিগ-ইন বাতিল করা সম্ভব prepareForSegue
। আমি আপনার যুক্তিটিকে এমন বিন্দুতে সরানোর পরামর্শ দেব যে performSegue
বার্তাটি প্রথমে প্রেরণ করা হয়েছে।
যদি আপনি ইন্টারফেস বিল্ডারকে সরাসরি নিয়ন্ত্রণে সিগ বেঁধে রাখার জন্য ব্যবহার করে থাকেন (যেমন, কোনও সিগিকে সরাসরি একটি এর সাথে সংযুক্ত করে UIButton
), তবে আপনি কিছুটা রিফ্যাক্টরিং দিয়ে এটি সম্পাদন করতে পারেন। নির্দিষ্ট কন্ট্রোলের পরিবর্তে সেগটিকে ওয়্যার কন্ট্রোলারে রেখে দিন (পুরাতন সেগু লিঙ্কটি মুছুন এবং তারপরে ভিউ কন্ট্রোলার থেকে গন্তব্য দৃশ্যের নিয়ামকটিতে নিয়ন্ত্রণ-টেনে আনুন)। তারপরে IBAction
আপনার ভিউ কন্ট্রোলারে একটি তৈরি করুন এবং নিয়ন্ত্রণটি আইবিএक्शनটিতে তারে দিন। তারপরে আপনি আপনার যুক্তিটি (খালি টেক্সটফিল্ডের জন্য পরীক্ষা করুন) আপনার সদ্য তৈরি করা আইবিএ ক্র্যাকশন করতে পারেন এবং অগ্রগতিগতভাবে বা না করার সিদ্ধান্ত নিতে পারেন performSegueWithIdentifier
।
সুইফট 3 : মজাদার কাঁধে পারফর্মসেটিক (আইডেন্টিফায়ার শনাক্তকারী: স্ট্রিং, প্রেরক: কোনও?) -> বুল
ফেরত মান সত্য যদি সেগ সম্পাদন করা উচিত বা মিথ্যা যদি তা উপেক্ষা করা উচিত।
উদাহরণ :
var badParameters:Bool = true
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
if badParameters {
// your code here, like badParameters = false, e.t.c
return false
}
return true
}
বিকল্পভাবে, কোনও বোতামটি অফার করা কিছুটা খারাপ আচরণ যা ব্যবহারকারীর টিপতে হবে না। আপনি স্টিগ হিসাবে তারযুক্ত তারযুক্ত ছেড়ে যেতে পারেন, তবে অক্ষম বোতামটি দিয়ে শুরু করুন। তারপরে ভিআইটি কন্ট্রোল আলায় একটি ইভেন্টে ইউআইটিেক্সটফিল্ডের "editChanged" তারে লাগান
- (IBAction)nameChanged:(id)sender {
UITextField *text = (UITextField*)sender;
[nextButton setEnabled:(text.text.length != 0)];
}
দ্রুত গতিতে এটি সহজ।
override func shouldPerformSegueWithIdentifier(identifier: String,sender: AnyObject?) -> Bool {
return true
}
যেমনটি ইব্রাহিম বলেছেন, নীচের ফাংশনে বৈধ কিনা তা পরীক্ষা করে দেখুন।
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(nullable id)sender
{
// Check this identifier is OK or NOT.
}
এবং, performSegueWithIdentifier:sender:
প্রোগ্রামিং দ্বারা ডাকা নিম্নলিখিত পদ্ধতিতে ওভাররাইট করে ব্লক করা যেতে পারে। ডিফল্টরূপে এটি বৈধ কিনা তা যাচাই বাছাই করছে না -shouldPerformSegueWithIdentifier:sender:
, আমরা এটি ম্যানুয়ালি করতে পারি।
- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
// Check valid by codes
if ([self shouldPerformSegueWithIdentifier:identifier sender:sender] == NO) {
return;
}
// If this identifier is OK, call `super` method for `-prepareForSegue:sender:`
[super performSegueWithIdentifier:identifier sender:sender];
}
[super performSegueWithIdentifier:identifier sender:sender];
কি আসলেই সত্য?
performSegueWithIdentifier:sender:
পদ্ধতিটিকে ওভাররাইড করে থাকেন এবং এটির super
পদ্ধতিটিকে কল না করেন ।
লগইন নিবন্ধের জন্য Segue সঞ্চালন করা উচিত
-(BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
[self getDetails];
if ([identifier isEqualToString:@"loginSegue"])
{
if (([_userNameTxtf.text isEqualToString:_uname])&&([_passWordTxtf.text isEqualToString:_upass]))
{
_userNameTxtf.text=@"";
_passWordTxtf.text=@"";
return YES;
}
else
{
UIAlertView *loginAlert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"Invalid Details" delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:nil];
[loginAlert show];
_userNameTxtf.text=@"";
_passWordTxtf.text=@"";
return NO;
}
}
return YES;
}
-(void)getDetails
{
NSArray *dir=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *dbpath=[NSString stringWithFormat:@"%@/userDb.sqlite",[dir lastObject]];
sqlite3 *db;
if(sqlite3_open([dbpath UTF8String],&db)!=SQLITE_OK)
{
NSLog(@"Fail to open datadbase.....");
return;
}
NSString *query=[NSString stringWithFormat:@"select * from user where userName = \"%@\"",_userNameTxtf.text];
const char *q=[query UTF8String];
sqlite3_stmt *mystmt;
sqlite3_prepare(db, q, -1, &mystmt, NULL);
while (sqlite3_step(mystmt)==SQLITE_ROW)
{
_uname=[NSString stringWithFormat:@"%s",sqlite3_column_text(mystmt, 0)];
_upass=[NSString stringWithFormat:@"%s",sqlite3_column_text(mystmt, 2)];
}
sqlite3_finalize(mystmt);
sqlite3_close(db);
}
কওলিনের উত্তরের অনুরূপ হ'ল নিয়ন্ত্রণটিকে তারযুক্ত ত্যাগ করতে হবে তবে দৃশ্যের শর্তের ভিত্তিতে নিয়ন্ত্রণটিকে বৈধতা দেওয়া উচিত। আপনি যদি টেবিল কক্ষের মিথস্ক্রিয়ায় গুলি চালিয়ে যাচ্ছেন তবে আপনার ঘরে ব্যবহারকারী স্টাফটি অক্ষম করার পাশাপাশি ইউজারটাইজএইএলভেড প্রপার্টিও সেট করতে হবে।
উদাহরণস্বরূপ, আমি একটি দলবদ্ধ টেবিল ভিউতে একটি ফর্ম পেয়েছি। কক্ষগুলির মধ্যে একটির অন্য টেবিল ভিউয়ের দিকে নিয়ে যায় যা একটি বাছাইকারী হিসাবে কাজ করে। যখনই মুখ্য দৃশ্যে কোনও নিয়ন্ত্রণ পরিবর্তন হয় আমি এই পদ্ধতিটিকে কল করি
-(void)validateFilterPicker
{
if (micSwitch.on)
{
filterPickerCell.textLabel.enabled = YES;
filterPickerCell.detailTextLabel.enabled = YES;
filterPickerCell.userInteractionEnabled = YES;
filterPickerCell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
else
{
filterPickerCell.textLabel.enabled = NO;
filterPickerCell.detailTextLabel.enabled = NO;
filterPickerCell.userInteractionEnabled = NO;
filterPickerCell.accessoryType = UITableViewCellAccessoryNone;
}
}
সুইফট 4 উত্তর:
নিম্নলিখিতটি সিগুড বাতিল করতে সুইফট 4 বাস্তবায়ন:
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
if identifier == "EditProfile" {
if userNotLoggedIn {
// Return false to cancel segue with identified Edit Profile
return false
}
}
return true
}
অন্য উপায়টি হ'ল উইলসিলেক্টরোউটি সহ টেবিলভিউয়ের পদ্ধতিটিকে ওভাররাইড করা এবং যদি আপনি সিগটি প্রদর্শন করতে না চান তবে শূন্যস্থান ফিরে আসুন।
showDetails()
- কিছু বুল হয়। বেশিরভাগ ক্ষেত্রে কোষে উপস্থাপন করা ডেটা মডেলটিতে প্রয়োগ করা উচিত indexPath
।
func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
if showDetails() {
return indexPath
}
return nil
}