2012-01-29 27 views
8

Tôi cố gắng để chuyển đổi đoạn mã này để C#, mã này là từ của Apple documentationChuyển đổi từ Obj C đến C#

NSDictionary* info = [aNotification userInfo]; 

CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0); 

scrollView.contentInset = contentInsets; 

scrollView.scrollIndicatorInsets = contentInsets; 

CGRect aRect = self.view.frame; 

aRect.size.height -= kbSize.height; 

if (!CGRectContainsPoint(aRect, activeField.frame.origin)) { 

    CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height); 

    [scrollView setContentOffset:scrollPoint animated:YES]; 

Cho đến nay đây là nỗ lực của tôi, tôi đang bị mắc kẹt tại CGRectValue.

    NSDictionary info = n.UserInfo; 

     SizeF kbSize = ((RectangleF)info[UIKeyboard.FrameBeginUserInfoKey]).Size; 

     UIEdgeInsets contentInsets = new UIEdgeInsets(0.0f, 0.0f, kbSize.Height, 0.0f); 

     this.uiScrollView.ContentInset = contentInsets; 
     this.uiScrollView.ScrollIndicatorInsets = contentInsets; 

     RectangleF aRect = this.View.Frame; 

     aRect.Size.Height -= kbSize.Height; 

     if(!aRect.Contains(_currentField.Frame)) 
     { 
      PointF scrollPoint = new PointF(0.0f, _currentField.Frame.Y - kbSize.Height); 
      this.uiScrollView.SetContentOffset(scrollPoint, true); 
     } 

Tôi có thể không sử dụng đúng loại, ai đó có thể vui lòng giúp tôi hoặc một số mã thay thế làm điều tương tự. Cảm ơn

+0

Tôi không chắc chắn ý của bạn là gì bởi "Tôi đang bị kẹt ở CGRectValue". Trình gỡ lỗi có hiển thị tất cả các biến được đề cập trước đây có các giá trị bạn mong đợi không? Trình gỡ lỗi hiển thị gì về aRect sau aRect = self.view.frame? –

+0

Tôi không thể chuyển đổi dòng đó thành mã C#. Nó không biên dịch. Vui lòng xem mã C# mà tôi đã thử. –

+0

Làm thế nào để bạn nhận được '_currentField'? Tôi cũng đang chuyển đổi hướng dẫn * [iOS SDK: Giữ nội dung từ bên dưới bàn phím] (http://code.tutsplus.com/tutorials/ios-sdk-keeping-content-from-underneath-the-keyboard--mobile -6103) * ... – testing

Trả lời

5

Có điều gì đó sai với mã C# của bạn.

aRect.Size.Height -= kbSize.Height; 

Size là loại System.Drawing.SizeF mà là một struct (ví dụ: một giá trị kiểu). Thay đổi giá trị của nó sẽ không được truyền lại cho ví dụ aRect (đây là hành vi .NET).

gì bạn cần làm là:

aRect.Height -= kbSize.Height; 

đó sẽ giảm thực sự kích thước aRect (không phải là Size struct đó sẽ không được chỉ định trở lại RectangleF).

+0

Cảm ơn bạn đã nắm bắt tốt. Đó thực sự là một lỗi trong bản dịch của tôi. Bây giờ, nó hoạt động tốt hơn, nhưng không chắc tại sao UITextField vẫn nhảy lên một chút khi tôi bắt đầu gõ, mặc dù nó đã được nhìn thấy ngay trên đầu bàn phím. Bất kì lời đề nghị nào? –

+0

Không phải không nhìn thấy nó nhảy như thế nào ;-) nhưng nếu bạn có thể tạo ra một trường hợp thử nghiệm nhỏ, khép kín cho thấy hành vi sau đó đính kèm nó vào một báo cáo lỗi tại http://bugzilla.xamarin.com và chúng tôi sẽ có nhìn nó – poupou

+0

Được rồi, sẽ làm. Trong thời gian đó, bạn có thể vui lòng cho tôi biết nếu có bất kỳ mẫu sửa chữa nào khác cho vấn đề này, tức là làm cho trường văn bản có thể nhìn thấy được khi bàn phím kết thúc. Tôi không thể tìm thấy một mẫu làm việc tốt cho đến nay cho monotouch. Cảm ơn đã giúp đỡ. –

13

đặn nó ra:

((NSValue)info[UIKeyboard.FrameBeginUserInfoKey]).RectangleFValue.Size 

Điều đó sẽ làm việc. Mặc dù tôi không thể làm cho nó hoạt động như tôi muốn, dòng mã đó sẽ thực sự biên dịch và dịch sang mã Obj C.

+1

'var kbSize = ((NSValue) thông tin [UIKeyboard.FrameBeginUserInfoKey]). CGRectValue.Size;' – Arvis