Убери это в каком-нибудь служебном классе.
+ (void)dismissKeyboard {
[self globalResignFirstResponder];
}
+ (void) globalResignFirstResponder {
UIWindow * window = [[UIApplication sharedApplication] keyWindow];
for (UIView * view in [window subviews]){
[self globalResignFirstResponderRec:view];
}
}
+ (void) globalResignFirstResponderRec:(UIView*) view {
if ([view respondsToSelector:@selector(resignFirstResponder)]){
[view resignFirstResponder];
}
for (UIView * subview in [view subviews]){
[self globalResignFirstResponderRec:subview];
}
}
Вы можете сделать это, используя функцию ScrollToCaret. Сначала вам нужно установить позицию курсора в конец текстового поля, а затем вы можете прокрутить до него. Вот как это сделать:
//move the caret to the end of the text
textBox.SelectionStart = textBox.TextLength;
//scroll to the caret
textBox.ScrollToCaret();
Вам нужно установить курсор в конце текста:
textBox1.Text += "your new text";
textBox1.Select(textBox1.Text.Length - 1, 0);
textBox1.ScrollToCaret();
Вы можете использовать SetScrollPos API:
[DllImport("user32.dll")]
static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);
[DllImport("user32.dll")]
static extern bool GetScrollRange(IntPtr hWnd, int nBar, out int lpMinPos, out int lpMaxPos);
const int SB_HORZ = 0;
const int SB_VERT = 1;
const int SB_CTL = 2;
...
void ScrollToBottom(Control ctl)
{
int min;
int max;
if (GetScrollRange(ctl.Handle, SB_VERT, out min, out max))
{
SetScrollPos(ctl.Handle, SB_VERT, max, true);
}
}
(не проверено)
Если вы используете метод AppendText () текстового поля, текст будет добавлен в конец любого существующего текста, и элемент управления будет прокручиваться для его отображения.
Это немного старый вопрос, но ни один из предложенных ответов не сработал для меня (ScrollToCaret() работает только когда TextBox имеет фокус). Так что на случай, если кто-то еще будет искать это в какой-то момент, я решил поделиться тем, что я нашел в качестве решения:
public class Utils
{
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);
private const int WM_VSCROLL = 0x115;
private const int SB_BOTTOM = 7;
/// <summary>
/// Scrolls the vertical scroll bar of a multi-line text box to the bottom.
/// </summary>
/// <param name="tb">The text box to scroll</param>
public static void ScrollToBottom(TextBox tb)
{
SendMessage(tb.Handle, WM_VSCROLL, (IntPtr)SB_BOTTOM, IntPtr.Zero);
}
}
Кредит за решение должен идти на этот пост на bytes.com: http://bytes.com/topic/c-sharp/answers/248500-scroll-bottom-textbox#post1005377