MY 프로그램은 간단한 계산기입니다. 기본 뷰는 CalcViewController.h/.m에 연결됩니다. 계산기 하단에는 버튼이 표시된 하위 뷰의 상위 100 개 점이 있습니다. 사용자가 표시중인 하위보기 단추를 클릭하면 나머지 하위보기가 입력 번호가 표시되는 레이블의 맨 아래까지 슬라이드됩니다. 하위 뷰 (AdvancedView)에는 현재 다른 버튼 하나만 있습니다 (sqrt). 이 키를 누르면 현재 레이블에있는 숫자를 가져 와서 모델에 전송하여 제곱근 방법을 수행하려고합니다. 내가 가지고있는 유일한 문제는 UILabel IBOutlet * 디스플레이가 내 AdvancedView가 아닌 내 CalViewController에 설정되어 있다는 것입니다. 필자는 내 AdvancedView.h에 CalcViewController.h 가져 오기 다음 CalcViewController에 *의 MAINVIEW 포인터를 합성 시도했지만 디스플레이의 숫자가되어 있다면 나는 내 고급보기 내에서 다른 컨트롤러에서 UILabel IBOutlet의 텍스트에 어떻게 액세스합니까?
double currentText = [self.mainView.display.text doubleValue];
를 호출 할 때 여전히 0.000000를 얻을. 나는 또한 그물을 많이 찾았고 여러 가지 프로토콜을 계속 사용하고 있지만이 개념을 완전히 바꿀 수는없는 듯하다. 그래서 제 질문으로 돌아가서 : 다른 컨트롤러 클래스에서 UILabel IBOutlet * 디스플레이의 텍스트에 어떻게 액세스합니까?
CalcViewController.h
#import <UIKit/UIKit.h>
@interface CalcViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *display;
@end
CalcViewController.m
#import "CalcViewController.h"
#import "CalculatorBrain.h"
#import "AdvancedView.h"
@interface CalcViewController()
@property (nonatomic) BOOL userIsInTheMiddleOfTyping;
@property (nonatomic, strong) CalculatorBrain *brain;
@property (nonatomic, strong) AdvancedView *myNewView;
@end
@implementation CalcViewController
@synthesize display = _display;
@synthesize userIsInTheMiddleOfTyping = _userIsInTheMiddleOfTyping;
@synthesize brain = _brain;
@synthesize myNewView = _myNewView;
- (AdvancedView *) myNewView
{
if (!_myNewView) _myNewView = [[AdvancedView alloc] initWithFrame:CGRectMake(0, 489, 320, 200)];
return _myNewView;
}
- (void)setMyNewView:(AdvancedView *)myNewView
{
NSLog(@"what the duece");
}
- (void)subView
{
int advancedTag = 199998;
self.myNewView.tag = advancedTag;
if (![self.view viewWithTag:advancedTag]) {
[self.view addSubview:self.myNewView];
}
}
- (void)viewDidAppear:(BOOL)animated
{
// Show the top 100 of AdvancedView
[super viewDidAppear:animated];
[self subView];
CGRect newFrame = self.myNewView.frame;
newFrame.origin.y = 480-75;
self.myNewView.frame = newFrame;
NSString *testText = self.display.text;
NSLog(@"The test text is %@", testText);
}
- (CalculatorBrain *)brain
{
if (!_brain) _brain = [[CalculatorBrain alloc] init];
return _brain;
}
- (IBAction)digitPressed:(UIButton *)sender {
NSString *digit = [sender currentTitle];
if (self.userIsInTheMiddleOfTyping)
{
self.display.text = [self.display.text stringByAppendingString:digit];
} else {
self.display.text = digit;
self.userIsInTheMiddleOfTyping = YES;
}
}
- (IBAction)operationPressed:(UIButton *)sender {
[self.brain pushOperandOne:[self.display.text doubleValue]];
[self.brain pushOperator:sender.currentTitle];
self.userIsInTheMiddleOfTyping = NO;
}
- (IBAction)enterPressed {
[self.brain pushOperandTwo:[self.display.text doubleValue]];
// self.userIsInTheMiddleOfTyping = NO;
double result = [self.brain execute];
NSString *resultString = [NSString stringWithFormat:@"%g", result];
self.display.text = resultString;
}
- (IBAction)clear {
self.display.text = @"0";
self.userIsInTheMiddleOfTyping = NO;
[self.brain cleadLastCalculatedValue];
}
@end
AdvancedView.h
#import <UIKit/UIKit.h>
@interface AdvancedView : UIView
@end
AdvancedView.m
: 여기에 내가 함께 일하고 있어요 코드입니다#import "AdvancedView.h"
#import "CalculatorBrain.h"
#import "CalcViewController.h"
@interface AdvancedView()
@property (nonatomic) BOOL toggleTheView;
@property (nonatomic, strong) CalculatorBrain *subBrain;
@property (nonatomic, strong) CalcViewController *mainView;
@end
@implementation AdvancedView
@synthesize toggleTheView = _toggleTheView;
@synthesize subBrain = _subBrain;
@synthesize mainView = _mainView;
- (CalcViewController *)mainView
{
if (!_mainView) _mainView = [[CalcViewController alloc] init];
return _mainView;
}
- (CalculatorBrain *)subBrain
{
if (!_subBrain) _subBrain = [[CalculatorBrain alloc] init];
return _subBrain;
}
- (id) initWithFrame:(CGRect)rect
{
if (self = [super initWithFrame:rect]) {
self.backgroundColor = [UIColor groupTableViewBackgroundColor];
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self
action:@selector(display:)
forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Advanced features" forState:UIControlStateNormal];
button.frame = CGRectMake(80.0, 10.0, 160.0, 40.0);
[self addSubview:button];
// sqrt button
self.backgroundColor = [UIColor groupTableViewBackgroundColor];
UIButton *sqrt = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[sqrt addTarget:self
action:@selector(squareIt:)
forControlEvents:UIControlEventTouchDown];
[sqrt setTitle:@"sqrt" forState:UIControlStateNormal];
sqrt.frame = CGRectMake(80.0, 60.0, 160.0, 40.0);
[self addSubview:sqrt];
}
return self;
}
- (void) squareIt:(id)sender
{
double currentText = [self.mainView.display.text doubleValue];
NSLog(@"%f", currentText);
double result = [self.subBrain squareRoot:[self.mainView.display.text doubleValue]];
NSLog(@"the text is: %f", result);
NSString *resultString = [NSString stringWithFormat:@"%g", result];
self.mainView.display.text = resultString;
}
- (void) display:(id)sender
{
if (!_toggleTheView) {
float bottomYOfDigitToBeDisplayed = 75;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelay:0.0];
[UIView setAnimationDuration:0.5];
self.frame = CGRectMake(0, bottomYOfDigitToBeDisplayed, 320, 400);
[UIView commitAnimations];
self.toggleTheView = YES;
} else {
float bottomYOfDigitToBeDisplayed = 405;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelay:0.0];
[UIView setAnimationDuration:0.5];
self.frame = CGRectMake(0, bottomYOfDigitToBeDisplayed, 320, 400);
[UIView commitAnimations];
self.toggleTheView = NO;
}
}
@end
참고 : 모델 클래스로 화면을 더 이상 차지하지 않으려 고했습니다. 그것은 단지 전형적인 모델입니다. 당신이 지금하고있는 일
답의 첫 번째 부분은 완벽한 이해를 지금하게 사용) m에 정의. 하지만 정적 CalcViewController *보기를 가져 오기 위에 추가하고 알 수없는 형식 이름 오류가 발생했습니다. 그런 다음 getCalcViewController 클래스를 내 advancedView.h에 선언하고 오류가 발생했습니다. 예상 유형입니다. 그리고 .m에서 getCalcViewController를 정의했을 때 오류가 발생했습니다 : 정의되지 않은 식별자 'view'를 사용합니다. '보기'오류가 발생하면 내 AdvancedView에서 해당 속성을 선언해야한다고 생각합니다. 그 밖의 다른 오류는 어떻습니까? – Scott
괜찮 았어 .. CalcViewController.mi의 가져 오기 문 다음에 static CalcViewController * 뷰를 추가하면 네이티브 iOS 데이터 유형과 혼동됩니다 .. 그럴 수 있습니다. 내 응답에 나머지 단계를 따르십시오. – Shubhank
그래, 모든 오류를 없앴습니다. 하지만 레이블에 9를 입력하면 고급 기능 버튼을 눌러 AdvancedView를 불러 와서 sqrt 버튼을 누르십시오. 0.000은 currentText에 할당됩니다. – Scott