Ich habe zwei Klasseneine Schaltfläche aus BaseViewController Klasse Vererben Storyboard mit
ViewController
(Baseclass) 2.DerivedViewController
(Abgeleitete Klasse)
ich eine Textbox in ViewController
Klasse. Ist es möglich, dieses Textfeld in DerivedViewController
Klasse über Vererbung zu verwenden?
Wenn ja, wie erhalte ich diese Textbox?
Ich versuchte folgenden Code für die Vererbung und ich erbte erfolgreich durch Importieren ViewController.h
wie folgt.
#import <UIKit/UIKit.h>
#import "ViewController.h>
@interface DerivedViewController : ViewController
@end
Nun mein Problem ist, wie man die textField
in diesen DerivedViewController
zu verwenden. Ich versuche, das Wiederverwendbarkeitskonzept der Vererbung zu erreichen. Da ich Storyboard verwende, ist es so verwirrend, wie man das textField
bekommt und es in dieses ViewController-Feld im Storyboard legt.
Vielen Dank für die Zeit :)
ViewController.m
#import "ViewController.h"
@interface ViewController()
@property (weak, nonatomic) IBOutlet UITextField *firstTB;
@property (weak, nonatomic) IBOutlet UITextField *secondTB;
@property (weak, nonatomic) IBOutlet UILabel *symbolLabel;
@property (weak, nonatomic) IBOutlet UITextField *find;
@end
@implementation ViewController
int resultValue=0;
- (IBAction)saveResult:(id)sender {
if((self.firstTB.text.length == 0) || self.secondTB.text.length == 0){
[self showError];
NSLog(@"Error");
}else{
int number1 = [[[self firstTB] text] intValue];
int number2 = [[[self secondTB] text] intValue];
resultValue=number1+number2;
NSLog(@"%d",resultValue);
[self saveData];
[self removeShadow];
}
}
- (IBAction)listResults:(id)sender {
// [self findData];
}
//Save Data.........
-(void) saveData{
BOOL success = NO;
NSString *alertString = @"Data Insertion failed";
success = [[DBManager getSharedInstance]saveData:
resultValue];
if (success == NO) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:
alertString message:nil
delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
if(success == YES){
NSLog(@"FY %d",resultValue);
}
}
//Find data.......
-(void) findData {
int n = [[DBManager getSharedInstance]findResult:[[[self find] text] intValue]];
if (n == 0) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:
@"Data not found" message:nil delegate:nil cancelButtonTitle:
@"OK" otherButtonTitles:nil];
[alert show];
}
else{
/* regNoTextField.text = findByRegisterNumberTextField.text;
nameTextField.text =[data objectAtIndex:0];
departmentTextField.text = [data objectAtIndex:1];
yearTextField.text =[data objectAtIndex:2]; */
NSLog(@"Data Found %d",n);
}
}
// For Shadow.....
-(void)showError{
[self addShadow];
}
-(void)addShadow{
if(self.firstTB.text.length == 0 && self.secondTB.text.length == 0){
[self glowfirstTB:YES];
[self glowsecondTB:YES];
}else if(self.firstTB.text.length == 0){
[self glowfirstTB:YES];
[self glowsecondTB:NO];
}else if(self.secondTB.text.length == 0){
[self glowsecondTB:YES];
[self glowfirstTB:NO];
}
}
-(void)removeShadow{
[self glowfirstTB:NO];
[self glowsecondTB:NO];
}
-(void)glowfirstTB:(BOOL) shall_I_Glow{
if(shall_I_Glow){
self.firstTB.layer.masksToBounds = NO;
self.firstTB.layer.shadowColor = [[UIColor blueColor] CGColor];
self.firstTB.layer.shadowOffset = CGSizeZero;
self.firstTB.layer.shadowRadius = 10.0f;
self.firstTB.layer.shadowOpacity = 1.0;
}else{
self.firstTB.layer.shadowRadius = 0.0f;
self.firstTB.layer.shadowOpacity = 0.0;
}
}
-(void)glowsecondTB:(BOOL) shall_I_Glow{
if(shall_I_Glow){
self.secondTB.layer.masksToBounds = NO;
self.secondTB.layer.shadowColor = [[UIColor blueColor] CGColor];
self.secondTB.layer.shadowOffset = CGSizeZero;
self.secondTB.layer.shadowRadius = 10.0f;
self.secondTB.layer.shadowOpacity = 1.0;
// [self.num setBorderStyle:UITextBorderStyleRoundedRect];
// self.passwordTextField.layer.cornerRadius = 15.0;
}else{
self.secondTB.layer.shadowRadius = 0.0f;
self.secondTB.layer.shadowOpacity = 0.0;
}
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
DerivedViewController.m (die als SearchPage.h hier genannt wird)
#import "SearchPage.h"
@interface SearchPage()
@property (weak, nonatomic) IBOutlet UITextField *searchText;
@end
@implementation SearchPage
- (IBAction)findButton:(id)sender {
self.firstTB.text = @"hello";
//Error message : Property 'firstTB' not found on object of type "SearchPage"
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
Wollen Sie nur die Textview zugreifen oder Sie wollen die gleiche Textview auf Viewcontrollers Bildschirm zeigen? –
möchte die gleiche TextBox auf beiden Bildschirmen verwenden (beide ViewControllers) – Ganesh
Wenn Sie dieselbe TextView auf beiden Basis und abgeleiteten ViewController zeigen möchten, müssen Sie TextView auf beiden ViewController von Storyboard hinzufügen und eine Unterklasse von UITextView erstellen und die gewünschten Eigenschaften festlegen Festlegen und Festlegen dieser Klasse als benutzerdefinierte Klasse der benutzerdefinierten ViewControlers TextViews-Klasse. Nur um Dinge zu löschen - Wenn Sie daran denken, TextView auf BaseViewControllern hinzuzufügen und das Gleiche in ChildViewController zu erben, wird TextView nicht automatisch angezeigt, Sie müssten textView auf beiden ViewControllern im Storyboard hinzufügen. –